java图片处理 文字水印图片水印缩放补白.docx
- 文档编号:27888079
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:8
- 大小:16.10KB
java图片处理 文字水印图片水印缩放补白.docx
《java图片处理 文字水印图片水印缩放补白.docx》由会员分享,可在线阅读,更多相关《java图片处理 文字水印图片水印缩放补白.docx(8页珍藏版)》请在冰豆网上搜索。
java图片处理文字水印图片水印缩放补白
java图片处理(文字水印、图片水印、缩放、补白)
1packagecom.hmw.picMark;
2
3importjava.awt.AlphaComposite;
4importjava.awt.Color;
5importjava.awt.Font;
6importjava.awt.Graphics2D;
7importjava.awt.Image;
8importjava.awt.geom.AffineTransform;
9importjava.awt.image.AffineTransformOp;
10importjava.awt.image.BufferedImage;
11importjava.io.File;
12importjava.io.IOException;
13
14importjavax.imageio.ImageIO;
15
16/**
17*图片工具类,图片水印,文字水印,缩放,补白等
18*@authorCarlHe
19*/
20publicfinalclassImageUtils{
21/**图片格式:
JPG*/
22privatestaticfinalStringPICTRUE_FORMATE_JPG="jpg";
23
24privateImageUtils(){}
25/**
26*添加图片水印
27*@paramtargetImg目标图片路径,如:
C:
//myPictrue//1.jpg
28*@paramwaterImg水印图片路径,如:
C:
//myPictrue//logo.png
29*@paramx水印图片距离目标图片左侧的偏移量,如果x<0,则在正中间
30*@paramy水印图片距离目标图片上侧的偏移量,如果y<0,则在正中间
31*@paramalpha透明度(0.0--1.0,0.0为完全透明,1.0为完全不透明)
32*/
33publicfinalstaticvoidpressImage(StringtargetImg,StringwaterImg,intx,inty,floatalpha){
34try{
35Filefile=newFile(targetImg);
36Imageimage=ImageIO.read(file);
37intwidth=image.getWidth(null);
38intheight=image.getHeight(null);
39BufferedImagebufferedImage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
40Graphics2Dg=bufferedImage.createGraphics();
41g.drawImage(image,0,0,width,height,null);
42
43ImagewaterImage=ImageIO.read(newFile(waterImg));//水印文件
44intwidth_1=waterImage.getWidth(null);
45intheight_1=waterImage.getHeight(null);
46g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));
47
48intwidthDiff=width-width_1;
49intheightDiff=height-height_1;
50if(xwidthDiff){
53x=widthDiff;
54}
55if(yheightDiff){
58y=heightDiff;
59}
60g.drawImage(waterImage,x,y,width_1,height_1,null);//水印文件结束
61g.dispose();
62ImageIO.write(bufferedImage,PICTRUE_FORMATE_JPG,file);
63}catch(IOExceptione){
64e.printStackTrace();
65}
66}
67
68/**
69*添加文字水印
70*@paramtargetImg目标图片路径,如:
C:
//myPictrue//1.jpg
71*@parampressText水印文字,如:
中国证券网
72*@paramfontName字体名称,如:
宋体
73*@paramfontStyle字体样式,如:
粗体和斜体(Font.BOLD|Font.ITALIC)
74*@paramfontSize字体大小,单位为像素
75*@paramcolor字体颜色
76*@paramx水印文字距离目标图片左侧的偏移量,如果x<0,则在正中间
77*@paramy水印文字距离目标图片上侧的偏移量,如果y<0,则在正中间
78*@paramalpha透明度(0.0--1.0,0.0为完全透明,1.0为完全不透明)
79*/
80publicstaticvoidpressText(StringtargetImg,StringpressText,StringfontName,intfontStyle,intfontSize,Colorcolor,intx,inty,floatalpha){
81try{
82Filefile=newFile(targetImg);
83
84Imageimage=ImageIO.read(file);
85intwidth=image.getWidth(null);
86intheight=image.getHeight(null);
87BufferedImagebufferedImage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
88Graphics2Dg=bufferedImage.createGraphics();
89g.drawImage(image,0,0,width,height,null);
90g.setFont(newFont(fontName,fontStyle,fontSize));
91g.setColor(color);
92g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));
93
94intwidth_1=fontSize*getLength(pressText);
95intheight_1=fontSize;
96intwidthDiff=width-width_1;
97intheightDiff=height-height_1;
98if(xwidthDiff){
101x=widthDiff;
102}
103if(yheightDiff){
106y=heightDiff;
107}
108
109g.drawString(pressText,x,y+height_1);
110g.dispose();
111ImageIO.write(bufferedImage,PICTRUE_FORMATE_JPG,file);
112}catch(Exceptione){
113e.printStackTrace();
114}
115}
116
117/**
118*获取字符长度,一个汉字作为1个字符,一个英文字母作为0.5个字符
119*@paramtext
120*@return字符长度,如:
text="中国",返回2;text="test",返回2;text="中国ABC",返回4.
121*/
122publicstaticintgetLength(Stringtext){
123inttextLength=text.length();
124intlength=textLength;
125for(inti=0;i1){
127length++;
128}
129}
130return(length%2==0)?
length/2:
length/2+1;
131}
132
133/**
134*图片缩放
135*@paramfilePath图片路径
136*@paramheight高度
137*@paramwidth宽度
138*@parambb比例不对时是否需要补白
139*/
140publicstaticvoidresize(StringfilePath,intheight,intwidth,booleanbb){
141try{
142doubleratio=0;//缩放比例
143Filef=newFile(filePath);
144BufferedImagebi=ImageIO.read(f);
145Imageitemp=bi.getScaledInstance(width,height,BufferedImage.SCALE_SMOOTH);
146//计算比例
147if((bi.getHeight()>height)||(bi.getWidth()>width)){
148if(bi.getHeight()>bi.getWidth()){
149ratio=(newInteger(height)).doubleValue()/bi.getHeight();
150}else{
151ratio=(newInteger(width)).doubleValue()/bi.getWidth();
152}
153AffineTransformOpop=newAffineTransformOp(AffineTransform.getScaleInstance(ratio,ratio),null);
154itemp=op.filter(bi,null);
155}
156if(bb){
157BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
158Graphics2Dg=image.createGraphics();
159g.setColor(Color.white);
160g.fillRect(0,0,width,height);
161if(width==itemp.getWidth(null))
162g.drawImage(itemp,0,(height-itemp.getHeight(null))/2,itemp.getWidth(null),itemp.getHeight(null),Color.white,null);
163else
164g.drawImage(itemp,(width-itemp.getWidth(null))/2,0,itemp.getWidth(null),itemp.getHeight(null),Color.white,null);
165g.dispose();
166itemp=image;
167}
168ImageIO.write((BufferedImage)itemp,"jpg",f);
169}catch(IOExceptione){
170e.printStackTrace();
171}
172}
173
174publicstaticvoidmain(String[]args)throwsIOException{
175pressImage("C:
//pic//jpg","C:
//pic//test.gif",5000,5000,0f);
176pressText("C:
//pic//jpg","旺仔之印","宋体",Font.BOLD|Font.ITALIC,20,Color.BLACK,0,0,8f);
177resize("C:
//pic//4.jpg",1000,500,true);
178}
179}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java图片处理 文字水印图片水印缩放补白 java 图片 处理 文字 水印 缩放 补白
![提示](https://static.bdocx.com/images/bang_tan.gif)