Эти два дня я загружал изображения в соответствии с моими потребностями. Честно говоря, я не знаю, что Java может работать так. Поскольку существует требование, я пошел найти информацию и изучил ее. Я поделюсь этим сейчас, надеясь помочь нуждающимся братьям.
Добавление водяных знаков в обычные картинки отличается от добавления водяных знаков к анимации. Добавление водяных знаков к обычным картинкам написано в собственном методе Java. Структура GIF4J используется для анимации. Есть много фреймворков, которые можно загрузить в CSDN. Рекомендуется загрузить треснувшую версию, потому что оригинальный пакет JAR будет иметь водяной знак, который не может быть использован.
Импорт java.awt.*; Импорт java.awt.image.bufferedImage; импортировать java.io.*; Импорт javax.imageio.imageio; Импорт javax.swing.imageicon; // Это класс GIF4 -Framework Import Com.gif4j.gifdecoder; импорт com.gif4j.gifencoder; Импорт com.gif4j.gifimage; Импорт com.gif4j.giftransformer; Импорт com.gif4j.textpainter; Импорт com.gif4j.watermark; /*** Создано ZXD 1/1/18. */ public class ImagereMarkutil {// Watermark Transparency Private Float Alpha = 0,5F; // watermark horizontal position private int positionwidth = 150; // Watermark Vertical Position Private Int PositionHeight = 300; // водяная ширина частная ширина int = 80; // Watermark High Private Int Height = 80; // Watermark Text Font Private Font font = новый шрифт ("宋体", font.bold, 72); // водяной тенс цвет личный цвет цвета = color.red; / *************** • int positionheight, int width, int height, шрифт шрифта, цвет) {if (alpha! = 0,0f) this.alpha = alpha; if (positionwidth! = 0) this.positionwidth = positionwidth; if (positionHeight! = 0) this.positionHeight = positionHeight; if (высота! = 0) this.height = высота; if (ширина! = 0) this.width = ширина; if (font! = null) this.font = font; if (color! = null) this.color = color; } / ** * Добавить изображение водяного знака к изображению * * @param Iconpath * PATH Watermark Image * @param srcimgpath * Путь источника изображения * @param targetpath * target path * / public void markimagebyicon (String Iconpath, String Srcimgpath, String TargetPath) {markimageByicon (iconpath, srcimgpath, neargpath, nearpath, srcimgpath, natull; } / *** Добавьте изображение водяного знака в изображение и установите угол поворота изображения водяного знака** @param iconpath* watermark path* @param srcimgpath* pource -vice path* @param targetpath* target path OutputStream OS = null; try {image srcimg = imageio.read (новый файл (srcimgpath)); BufferedImage buffimg = new BufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 1. Получить щетку объект Graphics2d G = buffimg.creategraphics (); // 2. Установите обработку Jagged Edge сегмента линии g.setrenderinghint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); g.drawimage (srcimg.getscaledinstance (srcimg.getwidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 3. Установите вращение водяного знака, если (null! = Degraph) {g.rotate (math.toradians (степень), (двойной) buffimg.getwidth () / 2, (двойной) buffimg.getheight () / 2); } // 4. Путь изображения водяного знака Изображение водяного знака, как правило, является GIF или PNG, так что прозрачность может быть установлена ImageICon imgicon = new Imageicon (Iconpath); // 5. Получить объект изображения. Image img = imgicon.getimage (); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, alpha)); Integer x = srcimg.getWidth (null); Integer y = srcimg.getheight (null); // 6. Местоположение изображения водяного знака G.Drawimage (IMG, X- (Положение-ширина+ширина), Y- (PositionHeight+высота), ширина, высота, нулевая); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_over)); // 7. Выпустить ресурс g.dispose (); // 8. Сгенерировать Image OS = new FileOutputStream (TargerPath); Imageio.write (buffimg, "jpg", OS); System.out.println («Изображение полное добавление изображения водяного знака»); } catch (Exception e) {e.printstackTrace (); } наконец {try {if (null! = os) os.close (); } catch (Exception e) {e.printstackTrace (); }}}} / ** * Добавить текст водяного знака в изображение * * @param logotext * Text * @param srcimgpath * pound pather * @param targetpath * target path * / public void markimagebytext (string logotext, string srcimgpath, string targetpath) {markimagebytext (logotext, srcimgpath, string targetpath) {markimagebytext (logotext, srcimgpath, noull, null, null, null, null, null, null, srcimgpath; } / ** * Добавьте текст водяного знака в изображение и установите угол поворота текста водяного знака * * @param logotext * @param logotext * @param srcimgpath * @param targetpath * @param степень * / public void markimageby (string logotext, string srcimgpath, string targetpath, integer dest) {inputstrem = nool; OutputStream OS = null; try {// 1. Изображение источника Srcimg = imageio.read (новый файл (srcimgpath)); BufferedImage buffimg = new BufferedImage (srcimg.getwidth (null), srcimg.getheight (null), bufferedimage.type_int_rgb); // 2. Получить щетку объект Graphics2d G = buffimg.creategraphics (); // 3. Установите обработку Jagged Edge сегмента линии g.setrenderinghint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); g.drawimage (srcimg.getscaledinstance (srcimg.getwidth (null), srcimg.getheight (null), image.scale_smooth), 0, 0, null); // 4. Установите вращение водяного знака, если (null! = Degraph) {g.rotate (math.toradians (степень), (двойной) buffimg.getwidth () / 2, (двойной) buffimg.getheight () / 2); } // 5. Установите цвет текста водяного знака G.SetColor (Color); // 6. Установить текстовый шрифт водяного знака g.setfont (font); // 7. Установить прозрачность текста водяного знака g.setComposite (alphacomposite.getinstance (alphacomposite.src_atop, alpha)); // 8. Первый параметр -> Установить содержание, следующие два параметра -> Координатная позиция текста на изображении (x, y) g.drawstring (logotext, positionwidth, positionHeight); // 9. Выпустить ресурс g.dispose (); // 10. Сгенерировать изображение OS = New FileOutputStream (TargerPath); Imageio.write (buffimg, "jpg", OS); System.out.println («Изображение полное добавление текста водяного знака»); } catch (Exception e) {e.printstackTrace (); } наконец {try {if (null! = is) is.close (); } catch (Exception e) {e.printstackTrace (); } try {if (null! = os) os.close (); } catch (Exception e) {e.printstackTrace (); }}}/ ********************* Объект Gifmage. GIFIMAGE RESIZIMIMG = GIFTRANSFORMER.RESIZE (GIFIMAGE, ширина, высота, истина); Gifencoder.encode (resizeimg, dest); } // Масштабируйте изображение GIF, напрямую проходите путь к файлу и установите ширину и высоту public void makegif (String src, String dest, int width, int height) throws ioexception {gifimage gifimage = gifdecoder.decode (новый файл (src)); // Создать объект Gifmage. makegif (новый файл (src), новый файл (dest), gifimage.getscreenwidth () / 2, gifimage.getscreenheight () / 2); } // Масштабирование изображения GIF, проходное файл, ширина и высота не могут быть установлены public void makegif (file src, файл dest), бросает ioException {gifimage gifimage = gifdecoder.decode (src); // Создать объект Gifimage. makegif (src, dest, gifimage.getscreenwidth () / 2, gifimage.getscreenheight () / 2); } // Масштабирование изображения GIF, прохождение пути файла и не настройка ширины и высоты public void makegif (String src, String dest) бросает ioException {makegif (new File (src), новый файл (dest)); } /*** Добавить текстовый водяной знак в анимацию* /public void AddTextwatermarktogif (файл src, String Watermarktext, File dest) бросает ioException {// инициализация и настройка водяного знака (шрифт, размер, цвет) TextPainter TextPainter = new TextPainter (новый шрифт ("Bold", Font.italic, 12)); TextPainter.setOutlinePaint (color.white); BufferedImage renderedwatermarktext = TextPainter.RenderString (watermarktext, true); // объект изображения GIFIMAGE GF = GIFDECODER.DECODE (SRC); // Получить размер изображения int iw = gf.getScreenWidth (); int ih = gf.getScreenHeight (); // Получить размер водяного знака int tw = renderedwatermarktext.getWidth (); int th = renderedwatermarktext.getheight (); // watermark point p = new Point (); px = iw - tw - 5; py = ih - th - 4; // Добавить водяным знаком водяного знака = новый водяной знак (RenderedWatermarkText, P); gf = watermark.apply (gifdecoder.decode (src), true); // Выходной gifencoder.encode (GF, Dest); } / *** Добавить изображение водяным знаком в анимацию* / public void AddimageWatermarkTogif (файл src, string watermarkpath, file dest) {try {buffereMage venderedWatermarkText = ImageIo.read (new File (watermarkpath)); // объект изображения GIFIMAGE GF = GIFDECODER.DECODE (SRC); // Получить размер изображения int iw = gf.getScreenWidth (); int ih = gf.getScreenHeight (); // Получить размер водяного знака int tw = renderedwatermarktext.getWidth (); int th = renderedwatermarktext.getheight (); // точка позиции водяного знака p = new Point (); PX = IW-TW-20; py = ih-th-20; // Watermark Watermark Watermark = новый водяной знак (RenderedWatermarkText, P); // Watermark Transparency Watermark.SetTransparency (1); gf = watermark.apply (gifdecoder.decode (src), false); // Выходной gifencoder.encode (GF, Dest); } catch (ioException e) {e.printstackTrace (); }} public static void main (string [] args) {// Путь, где изображение должно быть водяной строкой srcimgpath = "d: /1.jpg"; String logotext = "Копировать недействительную"; // Путь изображения watermark string iconpath = "d: /2.jpg"; // Путь выходного сигнала watermark file string targetTextPath = "d: /qie_text.jpg"; String targetTextPath2 = "d: /qie_text_rotate.jpg"; String targeticOnpath = "d: /qie_icon.jpg"; String targeticOnpath2 = "d: /qie_icon_rotate.jpg"; System.out.println («Чтобы начать добавлять текст водяного знака в изображение ...»); // Изображение текст водяного знака MarkimageBytext (Logotext, Srcimgpath, TargetTextPath); // Добавить текст водяного знака к изображению, поворота текста водяного знака -45 MarkimageBytext (Logotext, Srcimgpath, TargetTextPath2, -45); System.out.println («Добавить текст водяного знака в изображение, конец ...»); System.out.println («Добавьте изображение водяного знака в изображение, start ...»); setimagemarkoptions (0,3f, 1, 1, null, null); // Добавить изображение водяного знака в изображение, вращение изображения водяного знака -45 MarkimageByicon (Iconpath, Srcimgpath, TargeticOnPath2, -45); System.out.println («Добавить водяной знак в концы изображения ...»); // Добавить водяной знак в изображение анимации (добавить файл анимации водяного знака, добавить водяной знак, добавить выходной файл) addTextwatermarktogif (new File ("d: //10.gif"), "Копировать недействительный", новый файл ("d: //11.gif")); addimagewatermarktogif (новый файл ("d: //gif//10.gif"), "d: //gif//3.png", новый файл ("d: //gif//4.gif")); }}Вот методы добавления водяных знаков к обычным картинкам и добавления водяных знаков в анимацию. Если метод добавления водяных знаков к обычным изображениям может быть успешно добавлен, если изображение будет передано, изображение станет статичным. Если передается метод добавления водяных знаков к анимации, ошибка будет сообщена напрямую.
Я попробовал это, когда я их делал, поэтому я буду делать заметки и записываю их здесь сейчас, и я надеюсь, что они смогут помочь нуждающимся братьям.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.