다음과 같은 일반적인 기능을 구현할 수 있습니다: 이미지 크기 조정, 이미지 자르기, 이미지 유형 변환, 흑백으로 색상, 텍스트 워터마크, 그림 워터마크 등
코드는 다음과 같습니다. 코드 복사
import java.awt.AlphaComposite ;
java.awt.Color 가져오기;
java.awt.Font 가져오기;
java.awt.Graphics 가져오기;
java.awt.Graphics2D 가져오기;
java.awt.Image 가져오기;
java.awt.Toolkit 가져오기;
import java.awt.color.ColorSpace;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import java.io.IOException;
import javax. imageio.ImageIO;
/**
* 이미지 처리 도구:
* 기능: 이미지 크기 조정, 이미지 자르기, 이미지 유형 변환, 색상을 흑백으로, 텍스트 워터마크, 그림 워터마크 등
* @author Administrator
*/
public class ImageUtils {
/**
* 몇 가지 일반적인 이미지 형식
*/
public static String IMAGE_TYPE_GIF = "gif";// 그래픽 교환 형식
public static String IMAGE_TYPE_JPG = "jpg";// Joint Photographic Experts Group
Public static String IMAGE_TYPE_JPEG = "jpeg"; // Joint Photo Experts Group
public static String IMAGE_TYPE_BMP = "bmp" // 표준 이미지 파일 형식인 영문 비트맵(Bitmap)의 약어입니다. Windows 운영 체제에서
public static String IMAGE_TYPE_PNG = "png"; // 휴대용 네트워크 그래픽
public static String IMAGE_TYPE_PSD = "psd" // Photoshop의 특수 형식 Photoshop
/**
* 프로그램 항목: 테스트용
* @param args
*/
public static void main(String[] args) {
사용 사용 사용 사용 사용 사용 ’ ’ s ’ s ‐ ‐ ‐‐‐‐‐ 이미지 크기를 다음과 같이 조정합니다.
테스트 확인
높이 및 너비 사용 사용 사용 사용 ‐ 사용 사용 사용 사용 using out out out out out out out out out out out out out out out out out 의 . / 2-이미지 자르기:
‐ 에 따라 잘라냅니다. 지정된 시작점 좌표와 너비 및 높이
ImageUtils .cut("e:/abc.jpg", "e:/abc_cut.jpg", 0, 0, 400, 400 ); // 테스트 OK
ImageUtils.cut2("e:/abc.jpg", "e:/", 2, 2 ); // 테스트 OK
// 방법 3: 슬라이스의 너비와 높이 지정
ImageUtils.cut3("e :/abc.jpg", "e:/", 300, 300 ); // 테스트 확인
T Imageutils.convert ("E: /abc.jpg", "GIF ", "E: /abc_convert.gif" ); // 테스트 ok
// 4색을 흑백으로:
// 5- 그림에 텍스트 워터마크 추가:
imageutils.pressterxt (" 나는 워터마크 텍스트입니다 ", "e:/abc.jpg","e:/abc_pressText.jpg","宋体",Font.BOLD,Color.white,80, 0, 0, 0.5f);//테스트 확인
.
~ // 6-사진에 이미지 워터마크 추가:
ImageUtils.pressImage(" e:/abc2.jpg", "e:/abc.jpg", "e:/abc_pressImage.jpg", 0, 0, 0.5f);//테스트 OK
}
/**
* 이미지 크기 조절(비율에 따라 크기 조절)
사용 사용 사용 - */
public final static void scale(String srcImageFile, String result,
int scale, boolean flag) {
시도 {
BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
int width = src.getWidth(); // 得到源图宽
int height = src.getHeight(); // 得到源图长
if (플래그) {// 放大
width = width * scale;
height = height * scale;
} else {// 缩小
너비 = 너비 / 배율;
높이 = 높이 / 배율;
}
이미지 이미지 = src.getScaledInstance(width, height,
Image.SCALE_DEFAULT);
BufferedImage.TYPE_INT_RGB);
그래픽 g = tag.getGraphics();
g. drawImage(이미지, 0, 0, null); // 绘 g.dispose();
ImageIO.write(tag, "JPEG", new File(result));// 输 Out文件流
} catch (IOException e) {🜜 e.printStackTrace ();
}
}
/**image * 이미지 크기 조정 (높이 및 너비 확대)
* @Param srcimageFile 원본 이미지 파일 주소
@param result
* @Param Height 높이
@ @
@ @ @ @ @ @ @ @ @ @ @ @ @ @@Param 너비가 확대됩니다. @param bb 비율이 잘못된 경우 필러가 필요한지 여부: true는 필러가 없음을 의미합니다.*/
public final static void scale2(String srcImageFile, String result, int height, int width, boolean bb) {
시도해 보세요 {
double ratio = 0.0; // 缩放比例
File f = new File(srcImageFile);
BufferedImage bi = ImageIO.read(f);
Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
// 计算比例
if ( (bi.getHeight() > 높이) || (bi.getWidth() > 너비)) {
if (bi.getHeight() > bi.getWidth()) {
ratio = (new Integer(height) ).doubleValue()
/ bi.getHeight();
} else {
ratio = (new Integer(width)).doubleValue() / bi.getWidth();
}
AffineTransformOp op = new AffineTransformOp(AffineTransform
. getScaleInstance(ratio, ratio), null);
itemp = op.filter(bi, null);
}🎜 if (bb) {//补白🎜 BufferedImage image = new BufferedImage(width, height, 🎜 BufferedImage.TYPE_INT_RGB); 🎜 Graphics2D g = image.createGraphics();🎜 g.setColor(Color.white);🎜 g.fillRect(0, 0, 너비, 높이);🎜 if (폭 == itemp.getWidth(null))🎜 g. drawImage(item, 0, (높이 - itemp.getHeight(null)) / 2,🎜 itemp.getWidth(null), itemp.getHeight(null),🎜 Color.white, null); 🎜 else🎜 g.drawImage(item , (너비 - itemp.getWidth(null)) / 2, 0,🎜 itemp.getWidth(null), itemp.getHeight(null),🎜 Color.white, null);🎜 g.dispose();
itemp = image;
}
ImageIO.write((BufferedImage) itemp, "JPEG", new File(result));
} catch (IOException e) {🜜 e.printStackTrace();
}#取源图상
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getHeight(); // 源图宽degree
int srcHeight = bi.getWidth(); // 源图고도
if (srcWidth > 0 && srcHeight > 0) {
이미지 이미지 = bi.getScaledInstance(srcWidth, srcHeight,
Image.S CALE_DEFAULT);
// 4个参数分别为图image起点坐标和宽高
// 即: CropImageFilter(int x,int y,int width,int height)
ImageFilter CropFilter = new CropImageFilter(x, y, width, height);
Image img = Toolkit.getDefaultToolkit ().createImage(
신규 FilteredImageSource(image.getSource(),
cropFilter));
BufferedImage 태그 = new BufferedImage(너비, 높이, BufferedImage.TYPE_INT_RGB);
그래픽 g = tag.getGraphics();
g.drawImage(img, 0, 0, 너비, 높이, null); // 绘切后的图
g.dispose();
// 输 为文件
ImageIO.write(tag, "JPEG", new File(result));
}
} catch(예외 e) {
e .printStackTrace();
}
}
/**
* 图image切割(指定切 Images 行数 列数)
* @param srcImageFile 源图地址
* @param descDir 切文目标文件夹
* @param 행目标切分行数。默认2,必须是范围 [1, 20] 之内
* @param cols 대상 슬라이싱 열 수입니다. 기본값 2, [1, 20] 범위 내에 있어야 합니다.
| 행 = 2; // 분할 행 수
사용 사용 사용 사용 사용 사용 사용 사용 사용 ‐ out out of 's to use ‐ ‐ ‐ File(srcImageFile));
int srcWidth = bi.getHeight(); // 소스 이미지 너비
int srcHeight = bi.getWidth() // 소스 이미지 높이
if (srcWidth > 0 && srcHeight &g t; 0) {
이미지 img; int destWidth = srcWidth; int destHeight = srcHeight; // 각 슬라이스의 너비 Height
} else { destWidth = (int) Math.floor (srcWidth / cols) + 1;
}
ight = (int) Math.floor(srcWidth / 행) + 1;
/개선 아이디어: (int i = 0에 대해 멀티스레딩을 사용하여 속도를 높일 수 있습니까? ; i < 행 i++) {
매개변수는 이미지 시작점 좌표와 넓은 높이입니다. //: CropImageFilter (int x, int y, int width, int height)
CropFilter = New CropimageFilter (J * Destwidth, I * Destheight ,
DestWidth, Destheight)
IMG = Toolkit.getDefaultToolkit().createImage(
새로운 FilteredImageSource(image.getSource(), ~ ~ | ~ ~ " + j + ".jpg")
/**
* 이미지 자르기(슬라이스의 너비와 높이 지정)
> 기본값 200
* @param destHeight 대상 슬라이스 높이. 기본값 150
*/
public final static void cut3(String srcImageFile, String descDir,
int destWidth, int destHeight) {
try {
if(destWidth<=0) = 200 // 슬라이스 너비
if (destHeight<=0) destHeight = 150; // 슬라이스 높이
> 파일)); 이미지 너비
int srcHeight = bi.getWidth(); 높이
srcHeight를 사용하여 사용 srcHeight를 사용하여 사용 을 통해 밖으로 ‐ ‐ ImageFilter CropFilter;
이미지 이미지 = bi.getScaledInstance(srcWidth, srcHeight , Image.SCALE_DEFAULT) if (srcWidth % destWidth == 0) {
cols = srcWidth / destWidth;
~ ~ ~ > > ; 행; i++) {
mageFilter(int x,int y,int width, int height)
CropFilter = New CropimageFilter (J * Destwidth, I * Destheight,
destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(
새로운 FilteredImageSource(image.getSource(), ~ ~ | ~ ~ " + j + ".jpg")
/**
* 图像类型转换:GIF->JPG、GIF->PNG、PNG->JPG、PNG->GIF(X)、BMP->PNG
* @param srcImageFile 源图像地址
* @param formatName 包含格式非正式名称的 String:如JPG、JPEG、GIF等
* @param destImageFile 目标图像地址
*/
public final static void convert(String srcImageFile, String formatName, String destImageFile) {
try {
File f = new File(srcImageFile);
f.canRead();
f.canWrite();
BufferedImage src = ImageIO.read(f);
ImageIO.write(src, formatName, new File(destImageFile));
} catch (Exception e) {
e.printStackTrace();
}
}
e.printStackTrace();
}
}
/**
* 색상을 흑백으로 변환
* @param srcImageFile 소스 이미지 주소
* @param destImageFile 대상 이미지 주소
*/
public final static void pressText(String pressText,
String srcImageFile, String destImageFile, String FontName,
int 글꼴스타일, 색상 color, intfontSize,int x,
int y, float alpha) {
시도 {
File img = new File(srcImageFile);
Image src = ImageIO.read(img);
int height = src.getHeight(null);
BufferedImage 이미지 = new BufferedImage(폭, 높이,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.create 그래픽();
g.drawImage(src, 0, 0, width, height, null);
g.setColor(color);
g.setFont(new Font(fontName,fontStyle,fontSize));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
알파));
// 在指定坐标绘绘文字
g.drawString(pressText, (width - (getLength(pressText) *fontSize))
/ 2 + x, (height -fontSize) / 2 + y);
g.dispose() ;???? }
_ {
File img = new File(srcImageFile);
Image src = ImageIO.read(img);
int width = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage 이미지 = 신규 BufferedImage(너비, 높이,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(src, 0, 0, 너비, 높이, null);
g.setColor(color);
g .setFont(new Font(fontName,fontStyle,fontSize));
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
alpha));
// 재정정坐标绘제한수印文字
g.drawString(pressText, (너비 - (getLength(pressText) *fontSize))
/ 2 + x, (height -fontSize) / 2 + y);
g.dispose();
ImageIO.write((BufferedImage) image, "JPEG", 새 파일 (destImageFile));
} catch (예외 e) {
e.printStackTrace();
}
}
/**
* 사진에 이미지 워터마크 추가
* @param pressImg 워터마크 이미지
다음을 사용하여 사용 - 기본값은 중간입니다.
* @param y 보정 값입니다. 기본값은 중간입니다.
* @param 알파 투명도: 알파는 [0.0, 1.0] 범위(경계 값 포함) 내의 부동 소수점 숫자여야 합니다.
*/
public final static void pressImage(String pressImg, String srcImageFile,String destImageFile,
int x, int y, float alpha) {
시도 {
File img = new File(srcImageFile);
Image src = ImageIO.read(img);
int wideth = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(wideth, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);
// 水印文件
Image src_biao = ImageIO.read(new File(pressImg));
int wideth_biao = src_biao.getWidth(null);
int height_biao = src_biao.getHeight(null);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
알파) );
g.drawImage(src_biao, (wideth - wideth_biao) / 2,
(height - height_biao) / 2, wideth_biao, height_biao, null);
// 水印文件结束
g.dispose();
ImageIO .write((BufferedImage) 이미지, "JPEG", 새 파일(destImageFile) );
} catch(예외 e) {
e.printStackTrace();
}
}
/**
* @param text
* @return
*/
public final static int getLength(String text) {
int length = 0;
(int i = 0; 나는 < 텍스트.길이(); i++) {
if (new String(text.charAt(i) + "").getBytes().length > 1) {
길이 += 2;
} else {
길이 += 1;
}
}
반환 길이 / 2;
}
}
위 내용은 Java의 이미지 스케일링, 자르기, 유형 변환, 워터마킹 및 기타 기능 구현에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!