В этой статье описывается метод добавления водяных знаков с изображением, текстовые водяные знаки и мозаики в изображения. Поделитесь этим для вашей ссылки, следующим образом:
Вы можете создать новый класс UTILS в Eclipse, скопировать следующий код и использовать его напрямую, а в следующем методе есть добавление отдельных или нескольких водяных знаков.
пакет com.rzxt.fyx.common.util; import java.awt.alphacomposite; импорт java.awt.color; импорт java.awt.font; импорт java.awt.graphics2d; импорт java.awt.image; импорт java.awt.renderinghints; импорт java.awt.iMage. java.io.file; import javax.imageio.imageio; import javax.swing.imageicon;/** * Добавить водяной знак к изображению * @author tgy * */public class markimageutils {/** * @param args */public static -void main (string [] args) {String output = "f:/@pare/"; "; String Source = "f:/images/6.jpg"; // Изображение PATE String incon = "f:/images/icon2.png"; // Овер заставка пути изображения string ImageName = "mark_image"; // Имя изображения string ImageType = "jpg"; // Тип изображения JPG, JPEG, PNG, GIF String Text = "Watermarked"; int size = 4; // размер мозаики целая степень = null; // угол поворота водяного знака составляет -45, нулевой означает не вращать String Result = NULL; // Добавить изображение водяным знаком к результату изображения = markimageutils.markimagebymoreicon (значок, источник, выход, ImageName, ImageType, степень); // result = markimageutils.markimagebysingleicon (значок, источник, выход, ImageName, ImageType, степень); // Добавить текстовый водяной знак к изображению // result = markimageutils.markimagebymoretext (источник, выход, ImageName, ImageType, Color.red, Text, степень); // result = markimageutils.markimagebysingletext (источник, вывод, ImageName, ImageType, Color.Red, Telect, степень); ////mosaicaic the image ratodepe, Red, text, степень); Markimageutils.markimagebymosaic (источник, выход, ImageName, ImageType, размер); System.out.println (результат); }/** * Добавить несколько изображений водяных знаков в разные местоположения изображения и установить угол поворота изображения водяного знака * @param Icon Icon Path Watermark Path (например: F:/images/icon.png) * @param Изображение Изображение без водяного знака (например: f:/images/6.jpg) * @param AS: 11111) * @param ImageType Тип изображения (например: jpg) * @param Степень Угол вращения изображения водяного знака, NULL означает отсутствие вращения */ public static String markimagebymoreicon (строковый значок, источник строки, вывод строки, String ImageName, String ImageType, степень Integer) {String result = "ошибка, добавляя изображение, Watermark water»; try {file file = new File (Source); File ficon = new File (значок); if (! file.isfile ()) {return source + "не файл изображения!"; } // Загрузите значок в память Image IC = imageIo.read (ficon); // значок высота int iheight = ic.getheight (null); // Читать изображение источника в изображение памяти img = imageio.read (file); // ширина изображения int width = img.getWidth (null); // высота изображения int height = img.getheight (null); BufferedImage bi = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); // Создать объект Graphics2D с указанной BufferedImage Graphics2D G = BI.CreateRagraphics (); // x, по умолчанию оси y начинается с 0 координат int x = 0; int y = 0; // Высота интервала двух изображений водяных знаков составляет 1/3 от изображения водяного знака int temp = iheight/3; int space = 1; if (height> = iheight) {space = height/iheight; if (space> = 2) {temp = y = iheight/2; if (space == 1 || space == 0) {x = 0; y = 0; }}} else {x = 0; y = 0; } // Установить обработку Jagged Edge сегмента линии g.setrenderinghint (renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear); // представлять изображение и преобразовать из пространства изображения в пространство пользователя, прежде чем рисовать G.Drawimage (img.getScaledInstance (ширина, высота, image.scale_smooth), 0,0, нулевой); for (int i = 0; i <space; i ++) {if (null! = degry) {// установить вращение водяного знака g.rotate (math.toradians (степень), (двойной) bi.getwidth () / 2, (двойной) bi.getheight () / 2); } // Путь изображения водяного знака, как правило, является GIF или PNG, так что прозрачность может быть установлена ImageICon imgicon = new ImageICon (Icon); // Получить объект изображения. Image con = imgicon.getimage (); // прозрачность, минимальное значение составляет 0, максимальное значение составляет 1 ясность плавания = 0,6F; g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, Clarity)); // Укажите положение координат изображения водяного знака (x, y) //g.drawimage(Con, 300, 220, null); g.drawimage (con, x, y, null); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_over)); y+= (icheight+temp); } g.dispose (); File sf = new File (output, ImageName+"."+ImageType); Imageio.write (Bi, ImageType, SF); // Сохранить изображение result = "Icon Watermark добавляется после завершения изображения"; } catch (Exception e) {e.printstackTrace (); } return Result; }/** * Добавьте один изображение водяной знак в изображение и установите угол поворота изображения водяной знаки * @param Icon Icon Path Watermark Path (например: F:/images/icon.png) * @param источник образа изображения без водяного знака (например: f:/images/6.jpg) * @param path -pather после добавления водяного знака (такого, как: f:/). * @param ImageType Тип изображения (например: jpg) * @param Степень Угол поворота изображения водяного знака, нулевое значение не означает вращения */ public Static String MarkimageBysingleicon (значок строки, источник строки, вывод строки, String ImageName, String ImageType, Integer степень) {String result = «Ошибка добавления Image Watermarm»; try {file file = new File (Source); File ficon = new File (значок); if (! file.isfile ()) {return source + "не файл изображения!"; } // Загрузите значок в память Image IC = imageIo.read (ficon); // значок высота int iheight = ic.getheight (null); // Читать изображение источника в изображение памяти img = imageio.read (file); // ширина изображения int width = img.getWidth (null); // высота изображения int height = img.getheight (null); BufferedImage bi = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); // Создать объект Graphics2D с указанной BufferedImage. Graphics2d g = bi.creategraphics (); // x, по умолчанию оси y начинается с 0 координат int x = 0; int y = (высота/2)-(iheight/2); // Установите обработку зазубного края линейного сегмента g.setRenderingHint (renderingHints.key_interpolation, renderingHints.value_interpolation_bilinear); // представлять изображение и преобразовать из пространства изображения в пространство пользователя, прежде чем рисовать G.Drawimage (img.getScaledInstance (ширина, высота, image.scale_smooth), 0,0, нулевой); if (null! = degry) {// установить вращение водяного знака g.rotate (math.toradians (степень), (двойной) bi.getwidth () / 2, (двойной) bi.getheight () / 2); } // Путь изображения водяного знака, как правило, GIF или PNG, поэтому прозрачность может быть установлена ImageICon Imgicon = new ImageICon (Icon); // Получить объект изображения. Image con = imgicon.getimage (); // прозрачность, минимальное значение составляет 0, максимальное значение составляет 1 ясность плавания = 0,6F; g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, Clarity)); // Укажите положение координат изображения водяного знака (x, y) //g.drawimage(Con, 300, 220, null); g.drawimage (con, x, y, null); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_over)); g.dispose (); File sf = new File (output, ImageName+"."+ImageType); Imageio.write (Bi, ImageType, SF); // Сохранить изображение result = "Icon Watermark добавляется после завершения изображения"; } catch (Exception e) {e.printstackTrace (); } return Result; }/** * Добавьте несколько текстовых водяных знаков в изображение и установите угол поворота текста водяного знака * @param. ИЗОБРАЖЕНИЕ ПАТИ изображения, который необходимо добавить (например: f:/images/6.jpg) * @param Цвет цвета текста водяного знака* @param word watermark text* @param Степень угла поворота текста водяного знака, что означает отсутствие вращения*/ public static String markimagebymoreText (источник строки, вывод строки, строка ImageName, String ImageType, цвет, строковое слово, integer степень) {String result = «Ошибка добавления текстового водяного знака»; try {// Читать исходный файл информации о изображении файл = новый файл (источник); if (! file.isfile ()) {return file + "не файл изображения!"; } Image img = imageio.read (file); // ширина изображения int width = img.getWidth (null); // высота изображения int height = img.getheight (null); // размер текста int size = 50; // Добавить водяной знак BufferedImage BI = новый BufferedImage (ширина, высота, bufferedimage.type_int_rgb); Graphics2d g = bi.creategraphics (); G.Drawimage (IMG, 0, 0, ширина, высота, нулевая); // Установить шрифт шрифта водяного знака font = new Font ("宋体", font.plain, size); // установить цвет водяного знака в соответствии с фоном изображения G.SetColor (Color); int x = ширина/3; int y = size; int space = высота/размер; for (int i = 0; i <space; i ++) {// Если ось y последней координаты выше высоты, выходите непосредственно, если ((y+size)> высота) {break; } if (null! = degry) {// установить вращение водяного знака g.rotate (math.toradians (степень), (двойной) bi.getwidth () / 2, (двойной) bi.getheight () / 2); } g.setfont (font); // Положение водяного знака G.DrawString (Word, x, y); y+= (2*размер); } g.dispose (); // Файл вывода изображения sf = новый файл (output, imageName+"."+ImageType); Imageio.write (Bi, ImageType, SF); // Сохранить Result Image = "Добавить Word Watermark после завершения изображения"; } catch (Exception e) {e.printstackTrace (); } return Result; }/** * Добавьте один текстовый водяной знак к изображению и установите угол поворота текста водяного знака * @param source Путь изображения, который необходимо добавить с помощью водяного знака (например: f:/images/6.jpg) * @param @param Цвет Цвет текста водяного знака* @param Word Watermark Text* @param Степень Угол поворота текста водяного знака, что означает отсутствие вращения*/ public Static String MarkimageBysingletext (источник строки, вывод строки, строка ImageName, String ImageType, цвет цвета, строковое слово, степень Integer) {String result = "Ошибка Text Watermark"; try {// Читать исходный файл информации о изображении файл = новый файл (источник); if (! file.isfile ()) {return file + "не файл изображения!"; } Image img = imageio.read (file); int width = img.getWidth (null); int height = img.getheight (null); // Добавить водяной знак BufferedImage BI = новый BufferedImage (ширина, высота, bufferedimage.type_int_rgb); Graphics2d g = bi.creategraphics (); G.Drawimage (IMG, 0, 0, ширина, высота, нулевая); // Установить шрифт шрифта водяного знака Font = новый шрифт ("宋体", font.plain, 50); // установить цвет водяного знака в соответствии с фоном изображения G.SetColor (Color); if (null! = degry) {// установить вращение водяного знака g.rotate (math.toradians (степень), (двойной) bi.getwidth () / 2, (двойной) bi.getheight () / 2); } g.setfont (font); int x = ширина/3; int y = высота/2; // Положение водяного знака G.DrawString (Word, x, y); g.dispose (); // Файл вывода изображения sf = новый файл (output, imageName+"."+ImageType); Imageio.write (Bi, ImageType, SF); // Сохранить Result Image = "Добавить Word Watermark после завершения изображения"; } catch (Exception e) {e.printstackTrace (); } return Result; }/** * Добавить мозаику к изображению * @param источник исходного пути изображения (например: f:/images/6.jpg) * @param Вывод после мозаирования, путь к сохранению изображения (например: f:/imals/) * @param ImageName Изображение (такое как: 11111) * @param ImageType -тип (такой, как: jpg). Высота каждого прямоугольника * @return */ public Static String MarkimageBymosaic (источник строки, вывод строки, String ImageName, String ImageType, int size) {String Result = "Произошла ошибка Mosaic изображения"; try {file file = new File (Source); if (! file.isfile ()) {return file + "не файл изображения!"; } BufferedImage img = imageio.read (file); // Читать изображение int width = img.getWidth (null); // исходная ширина изображения int height = img.getheight (null); // исходная высота изображения BufferedImage BI = новый BufferedImage (ширина, высота, bufferedimage.type_int_rgb); // Размер мозаики слишком большой или слишком мал, если (ширина <размер || высота <размер) {return "Размер мозаики слишком большой"; } if (size <= 0) {return "Размер мозаичной сетки слишком мал"; } int xcount = 0; // Нарисуйте номер в направлении x int ycount = 0; // Нарисуйте число в направлении y, если (ширина % size == 0) {xcount = width /size; } else {xcount = width / size + 1; } if (высота % size == 0) {ycount = height / size; } else {ycount = height / size + 1; } int x = 0; // x координата int y = 0; // y координата // Нарисуйте мозаику (рисовать прямоугольники и заполнить цвета) Graphics2d G = Bi.CreateGraphics (); for (int i = 0; i <xcount; i ++) {for (int j = 0; j <ycount; j ++) {// mosaic rectangle размер int mwidth = size; int mheight = size; if (i == xcount-1) {// Последнее в горизонтальном направлении недостаточно для одного размера mwidth = width-x; } if (j == ycount-1) {// Последнее в вертикальном направлении недостаточно для одного размера mheight = height-y; } // Значение RGB прямоугольника принимает центральный Pixel Int centerx = x; int centery = y; if (mwidth % 2 == 0) {centerx += mwidth / 2; } else {centerx += (mwidth - 1) / 2; } if (mheight % 2 == 0) {centery += mheight / 2; } else {centery += (mheight - 1) / 2; } Color = new Color (img.getrgb (centerx, centery)); g.setcolor (цвет); G.FillRect (x, y, mwidth, mheight); y = y + size; // Рассчитайте y координату следующего прямоугольника} y = 0; // Восстановить координату y x = x + size; // Рассчитать координату x} g.dispose (); File sf = new File (output, ImageName+"."+ImageType); Imageio.write (Bi, ImageType, SF); // Сохранить результат изображения = "мозаичный успех"; } catch (Exception e) {e.printstackTrace (); } return Result; }}Для получения большего количества контента, связанного с Java, читатели, которые заинтересованы в этом сайте, могут просмотреть темы: «Краткое изложение навыков работы с изображением Java», «Краткое изложение навыков даты и времени работы на Java», «Сводка навыков операции Java DOM Node», «Сводка файлов Java и навыки операции по каталогам» и «Учебные пособия по структуре данных Java и алгоритм».
Я надеюсь, что эта статья будет полезна для всех Java Programming.