Скопируйте код кода следующим образом:
пакет com.blogs.image;
импортировать java.awt.AlphaComposite;
импортировать java.awt.Color;
импортировать java.awt.Font;
импортировать java.awt.Graphics2D;
импортировать java.awt.Image;
импортировать java.awt.RenderingHints;
импортировать java.awt.image.BufferedImage;
импортировать java.io.File;
импортировать java.io.FileOutputStream;
импортировать java.io.InputStream;
импортировать java.io.OutputStream;
импортировать javax.imageio.ImageIO;
импортировать javax.swing.ImageIcon;
/**
* Изображение водяного знака
*/
общественный класс ImageUtil {
/**
* @param аргументы
*/
public static void main(String[] args) {
String srcImgPath = "e:/2.png";
String iconPath = "e://logo.jpg";
String targetPath = "e:/3.jpg";
//Добавляем водяной знак на изображение
ImageUtil.waterMarkImageByIcon(iconPath, srcImgPath, targerPath, 0, 0,
, 0,1е);
//Добавляем водяной знак на изображение, поворот водяного знака -45
// ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath,
// целевой путь2, -45);
}
/**
* Добавьте водяной знак на изображение и установите угол поворота изображения водяного знака.
*
* @param iconPath
* Путь к изображению водяного знака
* @param srcImgPath
* Путь к исходному изображению
* @param targetPath
* Путь к целевому изображению
* @param степень
* Угол поворота изображения водяного знака
* @параметр ширина
* Ширина (по сравнению с левым)
* @param высота
* Высота (по сравнению с верхом)
* @param ясность
* Чем ближе прозрачность (число меньше 1) к 0, тем прозрачнее.
*/
public static void WaterMarkImageByIcon(String iconPath, String srcImgPath,
Строка targerPath, Целочисленная степень, Целочисленная ширина, Целочисленная высота,
плавающая ясность) {
OutputStream ОС = ноль;
пытаться {
Изображение srcImg = ImageIO.read (новый файл (srcImgPath));
System.out.println("ширина:" + srcImg.getWidth(null));
System.out.println("высота:" + srcImg.getHeight(null));
BufferedImage buffImg = новый BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
//Получаем объект кисти
// Графика g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
//Устанавливаем обработку неровных краев для сегментов линий
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
нулевой);
if (ноль != степень) {
//Устанавливаем поворот водяного знака
g.rotate(Math.toRadians(степень),
(двойной) buffImg.getWidth() / 2,
(двойной) buffImg.getHeight()/2);
}
//Путь к изображению водяного знака Обычно водяной знак имеет формат gif или png, поэтому можно установить прозрачность.
ImageIcon imgIcon = новый ImageIcon (iconPath);
// Получаем объект изображения.
Изображение img = imgIcon.getImage();
float альфа = ясность // прозрачность;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
альфа));
//Указывает расположение изображения водяного знака
g.drawImage(img, ширина, высота, ноль);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
г.dispose();
ОС = новый FileOutputStream (targerPath);
// Генерируем изображения
ImageIO.write(buffImg, "JPG", os);
System.out.println("Добавление изображения водяного знака завершено!");
} catch (Исключение е) {
е.printStackTrace();
} окончательно {
пытаться {
если (ноль!= ОС)
ОС.закрыть();
} catch (Исключение е) {
е.printStackTrace();
}
}
}
/**
* Добавьте водяной знак на изображение и установите угол поворота изображения водяного знака.
*
* @param logoText
* Текст водяного знака
* @param srcImgPath
* Путь к исходному изображению
* @param targetPath
* Путь к целевому изображению
* @param степень
* Угол поворота изображения водяного знака
* @параметр ширина
* Ширина (по сравнению с левым)
* @param высота
* Высота (по сравнению с верхом)
* @param ясность
* Чем ближе прозрачность (число меньше 1) к 0, тем прозрачнее она
*/
public static void WaterMarkByText(String logoText, String srcImgPath,
Строка targerPath, Целочисленная степень, Целочисленная ширина, Целочисленная высота,
Плавающая четкость) {
//Путь к основному изображению
Входной поток = нуль;
OutputStream ОС = ноль;
пытаться {
Изображение srcImg = ImageIO.read (новый файл (srcImgPath));
BufferedImage buffImg = новый BufferedImage(srcImg.getWidth(null),
srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
//Получаем объект кисти
// Графика g= buffImg.getGraphics();
Graphics2D g = buffImg.createGraphics();
//Устанавливаем обработку неровных краев для сегментов линий
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
нулевой);
if (ноль != степень) {
//Устанавливаем поворот водяного знака
g.rotate(Math.toRadians(степень),
(двойной) buffImg.getWidth() / 2,
(двойной) buffImg.getHeight()/2);
}
//Установим цвет
g.setColor(Color.red);
//Установить шрифт
g.setFont(new Font("宋体", Font.BOLD, 30));
плавающая альфа = ясность;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
альфа));
// Первый параметр -> содержание настройки, следующие два параметра -> координата положения (x, y) текста на картинке.
g.drawString(текст логотипа, ширина, высота);
г.dispose();
ОС = новый FileOutputStream (targerPath);
// Генерируем изображения
ImageIO.write(buffImg, "JPG", os);
System.out.println("Добавление текста водяного знака завершено!");
} catch (Исключение е) {
е.printStackTrace();
} окончательно {
пытаться {
если (ноль != есть)
есть.закрыть();
} catch (Исключение е) {
е.printStackTrace();
}
пытаться {
если (ноль!= ОС)
ОС.закрыть();
} catch (Исключение е) {
е.printStackTrace();
}
}
}
}
Также существует код масштабирования изображения:
Скопируйте код кода следующим образом:
/**
* Масштабирование изображения (изображение пропорционально масштабируется до заданного размера, а пустые части заполняются белым цветом)
*
* @param исходный путь
* Путь к исходному изображению
* @param destPath
* Путь изображения после масштабирования
*/
public static void ZoomImage(String srcPath, String destPath, int destHeight, int destWidth) {
пытаться {
BufferedImage srcBufferedImage = ImageIO.read (новый файл (srcPath));
ИНТ imgWidth = destWidth;
int imgHeight = destHeight;
int srcWidth = srcBufferedImage.getWidth();
int srcHeight = srcBufferedImage.getHeight();
если (srcHeight >= srcWidth) {
imgWidth = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
} еще {
imgHeight = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
}
BufferedImage destBufferedImage = новый BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D Graphics2D = destBufferedImage.createGraphics();
графики2D.setBackground(Цвет.БЕЛЫЙ);
Graphics2D.clearRect(0, 0, destWidth, destHeight);
Graphics2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth/2) - (imgWidth/2), (destHeight/2) - (imgHeight/2), ноль);
графика2D.dispose();
ImageIO.write(destBufferedImage, "JPEG", новый файл(destPath));
} catch (IOException e) {
е.printStackTrace();
}
}