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