다음과 같이 코드 코드를 복사합니다 .
패키지 com.blogs.image;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
java.awt.Image 가져오기;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
java.io.파일 가져오기;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
javax.imageio.ImageIO 가져오기;
import javax.swing.ImageIcon;
/**
* 사진 워터마크
*/
공개 클래스 ImageUtil {
/**
* @param 인수
*/
공개 정적 무효 메인(String[] args) {
String srcImgPath = "e:/2.png";
문자열 iconPath = "e://logo.jpg";
String targetPath = "e:/3.jpg";
//이미지에 워터마크 추가
ImageUtil.waterMarkImageByIcon(iconPath, srcImgPath, targerPath, 0, 0,
, 0.1f);
//이미지에 워터마크 추가, 워터마크 회전 -45
// ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath,
// 타겟패스2, -45);
}
/**
* 사진에 워터마크를 추가하고 워터마크 사진의 회전 각도를 설정하세요.
*
* @param iconPath
*워터마크 이미지 경로
* @param srcImgPath
* 소스 이미지 경로
* @param 타겟패스
* 대상 이미지 경로
* @param 학위
* 워터마크 이미지 회전 각도
* @param 너비
* 너비(왼쪽 대비)
* @param 높이
* 높이(상단 대비)
* @param 명확성
* 투명도(1보다 작은 숫자)가 0에 가까울수록 투명해집니다.
*/
공개 정적 무효 waterMarkImageByIcon(문자열 iconPath, 문자열 srcImgPath,
문자열 targerPath, 정수 정도, 정수 너비, 정수 높이,
플로트 선명도) {
OutputStream 운영 체제 = null;
노력하다 {
Image 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,
렌더링Hints.VALUE_INTERPOLATION_BILINEAR);
g.draw이미지(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
널);
if (null != 정도) {
//워터마크 회전 설정
g.rotate(Math.toRadians(도),
(이중) buffImg.getWidth() / 2,
(이중) buffImg.getHeight() / 2);
}
//워터마크 이미지의 경로입니다. 워터마크는 일반적으로 gif 또는 png이므로 투명도를 설정할 수 있습니다.
ImageIcon imgIcon = new ImageIcon(iconPath);
// 이미지 개체를 가져옵니다.
이미지 img = imgIcon.getImage();
float alpha = 선명도;
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
알파));
//워터마크 이미지의 위치를 나타냅니다.
g.drawImage(img, 너비, 높이, null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
g.dispose();
os = new FileOutputStream(targerPath);
// 사진 생성
ImageIO.write(buffImg, "JPG", os);
System.out.println("워터마크 이미지 추가가 완료되었습니다!");
} 잡기(예외 e) {
e.printStackTrace();
} 마지막으로 {
노력하다 {
if (null != os)
os.close();
} 잡기(예외 e) {
e.printStackTrace();
}
}
}
/**
* 사진에 워터마크를 추가하고 워터마크 사진의 회전 각도를 설정하세요.
*
* @param logoText
* 워터마크 텍스트
* @param srcImgPath
* 소스 이미지 경로
* @param 타겟패스
* 대상 이미지 경로
* @param 학위
* 워터마크 이미지 회전 각도
* @param 너비
* 너비(왼쪽 대비)
* @param 높이
* 높이(상단 대비)
* @param 명확성
* 투명도(1보다 작은 숫자)가 0에 가까울수록 투명해집니다.
*/
공개 정적 무효 waterMarkByText(문자열 logoText, 문자열 srcImgPath,
문자열 targerPath, 정수 정도, 정수 너비, 정수 높이,
플로트 선명도) {
//메인 이미지의 경로
InputStream은 = null입니다.
OutputStream 운영 체제 = null;
노력하다 {
Image 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,
렌더링Hints.VALUE_INTERPOLATION_BILINEAR);
g.draw이미지(
srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
널);
if (null != 정도) {
//워터마크 회전 설정
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(logoText, 너비, 높이);
g.dispose();
os = new FileOutputStream(targerPath);
// 사진 생성
ImageIO.write(buffImg, "JPG", os);
System.out.println("워터마크 텍스트 추가가 완료되었습니다!");
} 잡기(예외 e) {
e.printStackTrace();
} 마지막으로 {
노력하다 {
if (null != is)
is.close();
} 잡기(예외 e) {
e.printStackTrace();
}
노력하다 {
if (null != os)
os.close();
} 잡기(예외 e) {
e.printStackTrace();
}
}
}
}
이미지 크기 조정 코드도 있습니다.
다음과 같이 코드 코드를 복사합니다 .
/**
* 이미지 스케일링 (이미지가 지정된 크기에 비례하여 스케일링되고, 빈 부분은 흰색으로 채워집니다)
*
* @param srcPath
* 소스 이미지 경로
* @param destPath
* 크기 조정 후 이미지 경로
*/
공공 정적 무효 ZoomImage(문자열 srcPath, 문자열 destPath, int destHeight, int destWidth) {
노력하다 {
BufferedImage srcBufferedImage = ImageIO.read(새 파일(srcPath));
int imgWidth = destWidth;
int imgHeight = destHeight;
int srcWidth = srcBufferedImage.getWidth();
int srcHeight = srcBufferedImage.getHeight();
if (srcHeight >= srcWidth) {
imgWidth = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
} 또 다른 {
imgHeight = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
}
BufferedImage destBufferedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D Graphics2D = destBufferedImage.createGraphics();
graphic2D.setBackground(Color.WHITE);
graphic2D.clearRect(0, 0, destWidth, destHeight);
graphic2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null);
graphic2D.dispose();
ImageIO.write(destBufferedImage, "JPEG", new File(destPath));
} 잡기(IOException e) {
e.printStackTrace();
}
}