Сегодня я столкнулся с необходимостью заполнить загруженное изображение водяными знаками. Я долго искал онлайн и установил водяной знак в указанном месте. Следующий код был преобразован кодом, который я нашел в Интернете. Давайте сначала посмотрим на картинку эффекта
Метод реализации обсуждается ниже:
Шаг 1: Используйте программное обеспечение PS или Meitu для разработки изображений Watermark, таких как:
Шаг 2: Поместите следующий код в класс:
пакет org.platform.framework.commons.util; import java.awt.alphacomposite; импорт java.awt.color; импорт java.awt.font; импорт java.awt.graphics2d; импорт java.awt.image; импорт java.awt.renderinghints; импорт java. java.io.file; импорт java.io.fileoutputstream; import java.io.inputstream; импорт java.io.outputstream; импорт javax.imageio.imageio; импорт javax.swing.imageicon; import com.founder.cms.watermark.Util.ImageMark { / ** прозрачность водяного знака* / частный статический поплавок альфа = 0,5F; / ** Угол вращения изображения водяного знака*/ частный статический двойной градус = 0f; Частный статический интервал int = 0; / ** * Установите параметры водяного знака, используйте значение по умолчанию без настройки * * @param alpha * прозрачность водяного знака * @param степень * Угол вращения изображения водяного знака * * @param Интервал * Интервал изображения водяного знака */ public void void setimagemarkoptions (float alpha, int, интервал Int) {if (alpha! } if (destrec! } if (интервал! = 0f) {ImageMarkutil.Interval = evvall; }} / *** Добавить изображение водяного знака к изображению** @param waterimgpath* watermark path* @param srcimgpath* pource pather* @param targetpath* target pather* / public void watermarkbyimg (string waterimgpath, string srcimgpath, string targetpath). TargetPath, 0); } / *** Добавить изображение водяного знака к изображению** @param waterimgpath* watermark path* @param srcimgpath* pource pather* @param targetpath* target pather* / public void watermarkbyimg (string waterimgpath, string srcimgpath) {try {watermarkimg (waterimgpath, srcimgpath) {try {watermarkimg (waterimgpath, srcimgpath) 0); } catch (Exception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} / *** Добавьте изображение водяного знака в изображение и установите угол поворота изображения водяного знака** @param waterimgpath* Путь изображения водяного знака* @param srcimgpath* Путь исходного изображения* @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. Установите вращение водяного знака, если (0! = Delet) {g.rotate (math.toradians (степень), (двойной) buffimg.getwidth () / 2, (двойной) buffimg .getheight () / 2); } // 4. Путь изображения водяного знака Изображение водяного знака, как правило, является GIF или PNG, так что прозрачность может быть установлена ImageIcon imgicon = new Imageicon (waterimgpath); // 5. Получить объект изображения. Image img = imgicon.getimage (); g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop, alpha)); // 6. Местоположение изображения водяного знака предназначено для (int height = интервал + imgicon.geticonheight (); height <buffimg .getheight (); высота = высота + интервал + imgicon.geticonheight ()) {for (int wewse = интервал + imgicon.geticonwidth (weew weewidth + wewdth () wewdth () = wewdth ();); imgicon.geticonwidth ()) {g.drawimage (img, вес - imgicon.geticonwidth (), высота - imgicon.geticonheight (), null); }} 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 (); }}} public static void main (string [] args) {System.out.println (".. Начните добавлять изображение водяного знака ..."); /*** Watermarkpath Watermark Image Address Address oploadPath Адрес после успешной загрузки*/// Изменить параметры по умолчанию // ImageMarkutil.SetImageMarkOptions (0,0F, 0, 20); //Imagemarkutil.watermarkbyimg( Watermarkpath, uploadpath); System.out.println (".. добавить изображение водяного знака в конец ..."); }} Шаг 3: Где загрузка успешна, назовите этот класс, например:
/ *** Адрес изображения Watermarkpath Watermark* uploadPath Адрес после успешной загрузки*/ imageMarkutil.watermarkbyimg (WatermarkPath, uploadPath); Если вы думаете, что интервал водяного знака слишком близко, вы можете установить интервал через следующий код: // Изменить параметры по умолчанию ImageMarkutil.setImageMarkoptions (0,0F, 0, 20); ImageMarkutil.WatermarkByimg (WatermarkPath, UploadPath);
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.