이 기사에서는 이미지 워터 마크, 텍스트 워터 마크 및 모자이크를 이미지에 추가하는 Java 방법에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
Eclipse에서 새로운 Utils 클래스를 생성하고 다음 코드를 복사하여 직접 사용하여 다음 방법은 단일 또는 다중 워터 마크를 추가 할 수 있습니다.
package com.rzxt.fyx.common.util; import java.awt.alphacomposite; import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awt.image; import java.awt.renderinghints; java.io.file; import javax.imageio.imageio; import javax.swing.imageicon;/** * 이미지에 워터 마크를 추가 * @author tgy * */public class markimageutils {/** * @param args */public static void main (string [] args) {문자열 출력 = "f :/이미지/"; 문자열 source = "f : /images/6.jpg"; // 소스 이미지 경로 문자열 ICON = "F :/IMAGES/ICON2.png"; // 이미지 경로 문자열 imageName = "mark_image"; // 이미지 이름 문자열 imageType = "jpg"; // 이미지 유형 jpg, jpeg, png, gif string text = "Watermarked"; int size = 4; // 모자이크 크기 정수 학위 = null; // 워터 마크 회전 각도는 -45, null은 문자열 result = null을 회전하지 않는 것을 의미합니다. // 이미지 watermark 추가 이미지 결과 = markImageUtils.markImageBymoreicon (아이콘, 소스, 출력, 이미지 이름, ImageType, Degree); // result = markImageUtils.markImageBysingLicon (아이콘, 소스, 출력, imageName, imageType, Dection); // 이미지에 텍스트 마크 추가 // result = markimageUtils.markimageBymoretext (소스, 출력, imageName, imageType, color.red, text, degree); // result = markImageUtils.markImageBysingLetext (출력, imageName, imageType, Red, Text); // mosaic that the image // mosaic MarkimageUtils.markimagebymosaic (소스, 출력, imageName, imageType, size); System.out.println (결과); }/** * 이미지의 다른 위치에 여러 이미지 워터 마크를 추가하고 WaterMark 이미지의 회전 각도를 설정하십시오. * @Param Icon WaterMark 이미지 경로 (: f : /images/icon.png) * @Param 소스 이미지 경로 (예 : f :/images/6.jpg) * @param 이미지 경로를 배출 한 후 이미지를 출력하십시오. AS : 11111) * @param imageType 이미지 유형 (예 : JPG) * @Param Degree WaterMark 이미지의 회전 각도, NULL은 회전을 의미하지 않습니다 */ public static String MarkImageBymoreicon (문자열 아이콘, 문자열 소스, 문자열 출력, 문자열 imageName, String imageType, 정수 수준) {String result = "Error watermark"; try {file file = 새 파일 (소스); 파일 ficon = 새 파일 (아이콘); if (! file.isfile ()) {return source + "이미지 파일이 아님!"; } // 아이콘을 메모리 이미지에로드 ic = imageio.Read (ficon); // 아이콘 높이 int iheight = ic.getheight (null); // 소스 이미지를 메모리 이미지로 읽습니다. IMG = imageIO.Read (file); // 이미지 너비 int 너비 = img.getWidth (null); // 이미지 높이 int 높이 = img.getheight (null); BufferedImage bi = New BufferedImage (너비, 높이, BufferedImage.type_int_rgb); // 지정된 bufferedImage Graphics2d g = bi.creategraphics ()로 그래픽 2D 객체를 만듭니다. // x, y 축소 기본값은 0에서 시작하는 기본값 int x = 0; int y = 0; // 두 워터 마크 이미지의 간격 높이는 워터 마크 이미지의 1/3입니다 int temp = iheight/3; int space = 1; if (높이> = 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; } // 라인 세그먼트의 들쭉날쭉 한 에지 처리를 설정했습니다. // 이미지를 나타내고 이미지 공간에서 사용자 공간으로 변환하기 전에 G.DrawImage (img.getScaledInstance (너비, 높이, image.scale_smooth), 0,0, null); for (int i = 0; i <space; i ++) {if (null! = dec } // WaterMark 이미지의 경로는 일반적으로 GIF 또는 PNG이므로 투명성을 설정할 수 있도록 ImagicOn Imgicon = New ImageIcon (ICON); // 이미지 객체를 가져옵니다. 이미지 con = imgicon.getImage (); // 투명성, 최소값은 0, 최대 값은 1 float clarity = 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 (); 파일 sf = 새 파일 (output, imageName+"."+imageType); imageio.write (Bi, ImageType, SF); // 이미지를 저장하면 결과 = "이미지가 완료된 후 아이콘 워터 마크가 추가됩니다"; } catch (예외 e) {e.printstacktrace (); } 반환 결과; }/** * 이미지에 단일 이미지 워터 마크를 추가하고 워터 마크 이미지 회전 각도 * @param 아이콘 워터 마크 이미지 경로 (예 : f : /images/icon.png) * @param 소스 이미지 경로 (: f : /images/6.jpg) * 워터 마크를 추가 한 후 이미지 경로를 출력합니다 (@param 이미지 :/) * 이미지 :/) 11111) * @param imageType 이미지 유형 (예 : JPG) * @Param 학위 워터 마크 이미지의 회전 각도, null은 회전을 의미하지 않습니다 */ public static string MarkimageBysingleICon (문자열 아이콘, 문자열 소스, 문자열 출력, 문자열 이미지, 문자열 이미지, 정수 도정) {string result = "Error adding adding watermarm"; try {file file = 새 파일 (소스); 파일 ficon = 새 파일 (아이콘); if (! file.isfile ()) {return source + "이미지 파일이 아님!"; } // 아이콘을 메모리 이미지에로드 ic = imageio.Read (ficon); // 아이콘 높이 int iheight = ic.getheight (null); // 소스 이미지를 메모리 이미지로 읽습니다. IMG = imageIO.Read (file); // 이미지 너비 int 너비 = img.getWidth (null); // 이미지 높이 int 높이 = img.getheight (null); BufferedImage bi = New BufferedImage (너비, 높이, BufferedImage.type_int_rgb); // 지정된 bufferedImage로 그래픽 2D 객체를 만듭니다. 그래픽 2d 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, null); if (null! = dec } // WaterMark 이미지의 경로는 일반적으로 GIF 또는 PNG이므로 투명성을 설정할 수 있습니다. ImageIcon Imgicon = New ImageIcon (ICON); // 이미지 개체를 가져옵니다. 이미지 con = imgicon.getImage (); // 투명성, 최소값은 0, 최대 값은 1 float clarity = 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 (); 파일 sf = 새 파일 (output, imageName+"."+imageType); imageio.write (Bi, ImageType, SF); // 이미지를 저장하면 결과 = "이미지가 완료되면 WaterMark가 추가됩니다."; } catch (예외 e) {e.printstacktrace (); } 반환 결과; }/** * 이미지에 여러 개의 텍스트 워터 마크를 추가하고 WaterMark 텍스트 회전 각도 * @Param 소스 추가 해야하는 이미지 경로를 설정하십시오 (: f :/images/6.jpg) * @Param WaterMark를 추가 한 후 이미지 출력 경로를 출력하십시오 (:/images/) * @param imagename 이미지 이름 (: 11111) * @param imagy image (jually image). @param 색상 워터 마크 텍스트의 색상* @param 단어 워터 마크 텍스트* @param 학위 회전이 없음을 의미합니다. 이는 회전하지 않음을 의미합니다. 시도 {// 원본 이미지 정보 파일을 읽습니다. 파일 = 새 파일 (소스); if (! file.isfile ()) {return file + "이미지 파일이 아님!"; } image img = imageio.read (파일); // 이미지 너비 int 너비 = img.getWidth (null); // 이미지 높이 int 높이 = img.getheight (null); // 텍스트 크기 int size = 50; // WaterMark BufferedImage 추가 BI = New BufferedImage (너비, 높이, BufferedImage.type_int_rgb); 그래픽 2d g = bi.creategraphics (); G.DrawImage (IMG, 0, 0, 너비, 높이, 널); // 워터 마크 글꼴 스타일 글꼴을 설정합니다. FONT FONT = New Font ( "宋体", font.pont.plain, size); // 그림의 배경에 따라 WaterMark 색상을 설정합니다. G.SetColor (색); int x = 너비/3; int y = 크기; int space = 높이/크기; for (int i = 0; i <space; i ++) {// 마지막 좌표의 y 축이 높이보다 높으면 ((y+size)> height) {break; } if (ull! = dec } g.setfont (font); // WaterMark 위치 G.DrawString (Word, X, Y); y+= (2*크기); } g.dispose (); // output image file sf = 새 파일 (output, imageName+"."+imageType); imageio.write (Bi, ImageType, SF); // 이미지 저장 이미지 결과 = "이미지 완료 후 워드 워터 마크 추가"; } catch (예외 e) {e.printstacktrace (); } 반환 결과; }/** * 이미지에 단일 텍스트 워터 마크를 추가하고 워터 마크 텍스트 회전 각도 * @param 소스 워터 마크와 함께 추가되어야하는 이미지 경로를 설정하십시오 (: f :/images/6.jpg) * @Param 출력 WARSMARK (: f :/images/) * @param imageName 이미지 이름 (11111) * @Param 이미지 이름 (11111111111). jpg)* @param 색상 워터 마크 텍스트의 색상* @param 단어 워터 마크 텍스트* @param 수준의 회전 각도는 회전하지 않음을 의미합니다. 이는 회전하지 않음을 의미합니다.*/ public static string markimagebysingletext (문자열 소스, 문자열 출력, 문자열 imageName, 문자열 이미지, 색상, 문자열 단어, Integer Degress) {문자열 result = "텍스트 워터 마크 추가"; 시도 {// 원본 이미지 정보 파일을 읽습니다. 파일 = 새 파일 (소스); if (! file.isfile ()) {return file + "이미지 파일이 아님!"; } image img = imageio.read (파일); int width = img.getWidth (null); int height = img.getheight (null); // WaterMark BufferedImage 추가 BI = New BufferedImage (너비, 높이, BufferedImage.type_int_rgb); 그래픽 2d g = bi.creategraphics (); G.DrawImage (IMG, 0, 0, 너비, 높이, 널); // 워터 마크 글꼴 스타일 글꼴을 설정합니다. FONT FONT = New Font ( "宋体", font.plain, 50); // 그림의 배경에 따라 WaterMark 색상을 설정합니다. G.SetColor (색); if (null! = dec } g.setfont (font); int x = 너비/3; int y = 높이/2; // WaterMark 위치 G.DrawString (Word, X, Y); g.dispose (); // output image file sf = 새 파일 (output, imageName+"."+imageType); imageio.write (Bi, ImageType, SF); // 이미지 저장 이미지 결과 = "이미지 완료 후 워드 워터 마크 추가"; } catch (예외 e) {e.printstacktrace (); } 반환 결과; }/** * 이미지에 모자이크 추가 * @param 소스 원본 이미지 경로 (: f :/images/6.jpg) * @param 출력, 모자이크 후 이미지를 저장하는 경로 (: f :/images/) * @param imageame image 이름 (11111) * @param imagetype (JPG) * @param mosi 크기 및 그에 따라 크기가 높아집니다. 사각형 * @return */ public static String MarkImageBymosaic (문자열 소스, 문자열 출력, 문자열 이미지 이름, 문자열 이미지 타입, int size) {문자열 result = "이미지 모자이크 오류가 발생했습니다."; try {file file = 새 파일 (소스); if (! file.isfile ()) {return file + "이미지 파일이 아님!"; } bufferedImage img = imageio.Read (파일); // 이미지를 읽습니다 int width = img.getWidth (null); // 원본 이미지 너비 int height = img.getheight (null); // 원본 이미지 높이 BufferedImage bi = New BufferedImage (너비, 높이, BufferedImage.type_int_rgb); // 모자이크 그리드 크기는 너무 크거나 너무 작습니다. } if (size <= 0) {return "모자이크 그리드의 크기가 너무 작습니다"; } int xcount = 0; // x 방향으로 숫자를 그립니다 int ycount = 0; // if (너비 % 크기 == 0) {xcount = 너비 /크기; } else {xcount = 너비 / 크기 + 1; } if (높이 % size == 0) {ycount = 높이 / 크기; } else {ycount = height / size + 1; } int x = 0; // x 좌표 int y = 0; // y coderinate // 모자이크 그리기 (사각형과 채우기 색상을 그리기) Graphics2d g = bi.creategraphics (); for (int i = 0; i <xcount; i ++) {for (int j = 0; j <ycount; j ++) {// mosaic 사각형 크기 int mwidth = size; int mheight = size; if (i == xcount-1) {// 수평 방향의 마지막 것은 하나의 크기에 충분하지 않습니다. mwidth = width-x; } if (j == ycount-1) {// 수직 방향의 마지막 것은 하나의 크기에 대해 충분하지 않습니다. mheight = height-y; } // 사각형 색상의 RGB 값은 중앙 픽셀 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 color = new color (img.getrgb (centerx, centery)); G. 세트 컬러 (색); G.FillRect (X, Y, MWIDTH, MHEIGHT); y = y + size; // 다음 사각형의 y 좌표를 계산합니다} y = 0; // y 좌표 x = x + size를 복원합니다. // x 좌표} g.dispose (); 파일 sf = 새 파일 (output, imageName+"."+imageType); imageio.write (Bi, ImageType, SF); // 이미지 저장 결과 결과 = "모자이크 성공"; } catch (예외 e) {e.printstacktrace (); } 반환 결과; }}더 많은 Java 관련 컨텐츠를 위해이 사이트에 관심이있는 독자는 "Java 이미지 운영 기술 요약", "Java 날짜 및 시간 운영 기술 요약", "Java Operation Dom Node Skills 요약", "Java 파일 및 디렉토리 운영 기술 요약"및 "Java 데이터 구조 및 알고리즘의 자습서"를 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.