处理图片的工具类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理图片的工具类相关的知识,希望对你有一定的参考价值。

  1 package com.ideal.common.util; 
  2 import java.awt.AlphaComposite;
  3 import java.awt.Color;
  4 import java.awt.Font;
  5 import java.awt.Graphics2D;
  6 import java.awt.Image;
  7 import java.awt.geom.AffineTransform;
  8 import java.awt.image.AffineTransformOp;
  9 import java.awt.image.BufferedImage;
 10 import java.io.ByteArrayInputStream;
 11 import java.io.ByteArrayOutputStream;
 12 import java.io.File;
 13 import java.io.FileOutputStream;
 14 import java.io.IOException;
 15 import java.io.InputStream;
 16 
 17 import javax.imageio.ImageIO;
 18 
 19 import net.glxn.qrgen.core.AbstractQRCode;
 20 import net.glxn.qrgen.core.image.ImageType;
 21 import net.glxn.qrgen.javase.QRCode;
 22 
 23 /**
 24  *
 25  */
 26 public final class ImageUtils {
 27     /**
 28      * 图片上加图片
 29      * @param pressImg 生成二维码的url
 30      * @param targetImg 
 31      * @param x 
 32      * @param y 
 33      * @param alpha
 34      */
 35     public final static void pressImage(String pressImg, String srcImg, String targetImg, int x, int y, float alpha) {
 36         try {
 37             File target = new File(targetImg);
 38             File img = new File(srcImg);
 39             Image src = ImageIO.read(img);
 40             int wideth = src.getWidth(null);
 41             int height = src.getHeight(null);
 42             BufferedImage image = new BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
 43             Graphics2D g = image.createGraphics();
 44             g.drawImage(src, 0, 0, wideth, height, null);
 45             //
 46             File qrCode = QRCode.from(pressImg).withCharset("UTF-8").to(ImageType.PNG).withSize(182, 182).file();
 47             Image src_biao = ImageIO.read(qrCode);
 48             //Image src_biao = ImageIO.read(new File(pressImg));
 49             int wideth_biao = src_biao.getWidth(null);
 50             int height_biao = src_biao.getHeight(null);
 51             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
 52             //g.drawImage(src_biao, (wideth - wideth_biao) / 2, (height - height_biao) / 2, wideth_biao, height_biao, null);
 53             g.drawImage(src_biao, 126, 823, wideth_biao, height_biao, null);
 54             //
 55             g.dispose();
 56             ImageIO.write((BufferedImage) image, "png", target);
 57         } catch (Exception e) {
 58             e.printStackTrace();
 59         }
 60     }
 61 
 62     /**
 63      * 添加文字
 64      * @param pressText 
 65      * @param targetImg 目标图片
 66      * @param fontName
 67      * @param fontStyle 
 68      * @param color 
 69      * @param fontSize 
 70      * @param x
 71      * @param y 
 72      * @param alpha
 73      */
 74     public static File pressText(String data, String srcImg, String fontName, int fontStyle, Color color, int fontSize, int x, int y, float alpha) {
 75         try {
 76              
 77             
 78             //Cpp cp = new Cpp(srcImg,targetImg);
 79             File img = new File(srcImg);
 80             Image src = ImageIO.read(img);
 81             int width = src.getWidth(null);
 82             int height = src.getHeight(null);
 83             BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 84             Graphics2D g = image.createGraphics();
 85             g.drawImage(src, 0, 0, width, height, null);
 86             g.setColor(color);
 87             Font font = new Font(fontName, fontStyle, fontSize);
 88             g.setFont(font);
 89             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));
 90             // 计算字符并且换行处理
 91             // 
 92             /*if (data.length()< 32) {
 93                 g.drawString(data, (width - (getLength(data) * fontSize)) / 2+ x, (height - fontSize)  + y);
 94                 
 95             }else{
 96                 for (int i = 0; i < data.length(); i++) {
 97                     
 98                 }
 99                 
100             }*/
101             //g.drawString(data, -410, 25);
102             g.drawString(data, (width - (getLength(data) * fontSize)) / 2+ x, 100);
103             g.dispose();
104             
105             //FileOutputStream outImgStream = new FileOutputStream(targetImg); 
106             // 输出图片
107              ImageIO.write((BufferedImage) image, "png", img);
108             // 转成输出流
109 //            ByteArrayOutputStream os = new ByteArrayOutputStream();  
110 //            ImageIO.write(image, "png", os);  
111 //            InputStream is = new ByteArrayInputStream(os.toByteArray());
112             
113             
114             //ImageIO.read(img); // 写入文件
115             return img;
116         } catch (Exception e) {
117             e.printStackTrace();
118             return null;
119         }
120     }
121 
122     /**
123      * 重置图片的大小
124      * @param filePath 
125      * @param height 
126      * @param width 
127      * @param bb
128      */
129     public static void resize(String filePath, int height, int width, boolean bb) {
130         try {
131             double ratio = 0.0; //
132             File f = new File(filePath);
133             BufferedImage bi = ImageIO.read(f);
134             Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
135             //
136             if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
137                 if (bi.getHeight() > bi.getWidth()) {
138                     ratio = (new Integer(height)).doubleValue() / bi.getHeight();
139                 } else {
140                     ratio = (new Integer(width)).doubleValue() / bi.getWidth();
141                 }
142                 AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);
143                 itemp = op.filter(bi, null);
144             }
145             if (bb) {
146                 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
147                 Graphics2D g = image.createGraphics();
148                 g.setColor(Color.white);
149                 g.fillRect(0, 0, width, height);
150                 if (width == itemp.getWidth(null))
151                     g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
152                 else
153                     g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);
154                 g.dispose();
155                 itemp = image;
156             }
157             ImageIO.write((BufferedImage) itemp, "png", f);
158         } catch (IOException e) {
159             e.printStackTrace();
160         }
161     }
162 
163     
164 
165     public static int getLength(String text) {
166         int length = 0;
167         for (int i = 0; i < text.length(); i++) {
168             if (new String(text.charAt(i) + "").getBytes().length > 1) {
169                 length += 2;
170             } else {
171                 length += 1;
172             }
173         }
174         return length / 2;
175     }
176     
177     /**
178      *  画空白图片
179      * @throws IOException 
180      */
181     public static void drawVerifyCode() throws IOException{
182         File file = new File("E:\\test\\1.png");
183         int width = 400;
184         int height = 400;
185         // 创建一个画布
186         BufferedImage bi = new BufferedImage(width, height,
187                 BufferedImage.TYPE_INT_RGB);
188         // 获取一个画笔
189         Graphics2D g = bi.createGraphics();
190         // 画图过程
191         // 设置画笔的颜色为白色
192         g.setColor(Color.WHITE);
193         g.fillRect(0, 0, width, height);
194         // 绘制灰色边框
195         g.setColor(Color.GRAY);
196         g.drawRect(0, 0, width - 1, height - 1);
197         // 将画布输出到文件中
198         ImageIO.write(bi, "PNG", file);
199     }
200     
201     public static File getInputStream(String pressImg,String title,String content, String path) {
202         //String pressImg = "E:/test/c.png"; // 生成二维码的url
203         String modelImg = path+"mb.png";
204         String targetImg = path+"send.png";
205         // 添加小图片
206         pressImage(pressImg, modelImg,targetImg, 0, 0, 1.0f);
207         //title = "  您所在的社区新增了一条通知,请扫码前去查看";
208         // 添加文字
209         return pressText(title, targetImg,"微软雅黑", Font.BOLD, Color.RED, 25, 0,0, 1.0f);
210     }
211     
212     public static void main(String[] args) throws IOException {
213 //        drawVerifyCode();
214 //        String path = "E:/test/";
215 //     
216         String pressImg = "E:/test/c.png"; // 生成二维码的url
217         String modelImg = "E:/test/mb.png";
218         String targetImg = "E:/test/ts.png";
219         // 添加小图片
220         pressImage(pressImg, modelImg,targetImg, 0, 0, 1.0f);
221         String data = "  随便说点啥";
222 //
223         // 添加文字
224     pressText(data, targetImg,"微软雅黑", Font.BOLD, Color.RED, 25, 0,0, 1.0f);
225 //    resize("E:/test/c.png", 182, 182, true);
226 //        String data = "开始加文字,这是加文字吗多加文字,这是加文字吗多加文字,这是加文字吗多加文字,这是加文字吗多加文字,这是加文字吗多加文字,这是加文字吗多加文字,这是加文字吗多加文字,这是加文字吗多加文字,这是加文字吗多加文字,这是加文字吗多加文字";
227 //        int length = getLength(data);
228 //        System.out.println(length);
229     }
230 }
231  
232  

 

以上是关于处理图片的工具类的主要内容,如果未能解决你的问题,请参考以下文章

图片处理 - PHP 工具类

图片处理工具类

SDWebImage之工具类

工具类ImageUtil——图片处理

Java常用工具类---image图片处理工具类Json工具类

Java常用工具类---image图片处理工具类Json工具类