图片工具类
来源:互联网 发布:ubuntu映射网络文件夹 编辑:程序博客网 时间:2024/06/06 23:54
项目用的图片工具类 包括复制图片 压缩图片 base64互转图片 bate互转图片
import com.google.common.collect.Maps;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;import java.util.Map;/** * 图片通用工具类 * Created by wulin */public class ImageUtils { private static Logger logger = LoggerFactory.getLogger(ImageUtils.class); /** * 复制图片 * * @param fromPath 原图片路径 * @param toPath 复制图片的路径 * @return */ public static boolean copyImage(String fromPath, String toPath) { return copyImage(fromPath, toPath, 1); } /** * 复制图片 * * @param fromPath 原图片路径 * @param toPath 复制图片的路径 * @param multiple 图片放大缩小的倍数, 长宽等比例放大缩小 * @return */ public static boolean copyImage(String fromPath, String toPath, Integer multiple) { try { fromPath = StringUtils.convertPath(java.net.URLDecoder.decode(fromPath, "UTF-8")); toPath = StringUtils.convertPath(java.net.URLDecoder.decode(toPath, "UTF-8")); String suffixName = toPath.substring(toPath.lastIndexOf(".") + 1); toPath = StringUtils.convertPath(toPath); File file = new File(fromPath); if (file == null || !file.isFile()) { return false; } else { //要拷贝的图片 Image image = ImageIO.read(file); int width = image.getWidth(null); //图片原宽度 int height = image.getHeight(null); //图片原高度 Mapmap = calcRatio(width, height, multiple); int toImgWidth = map.get("width"); //图片压缩后的宽度 int toImgHeight = map.get("height"); //图片压缩后的高度 BufferedImage imageTag = new BufferedImage(toImgWidth, toImgHeight, BufferedImage.TYPE_INT_RGB); imageTag.getGraphics().drawImage(image, 0, 0, toImgWidth, toImgHeight, null); mkDirs(toPath); ImageIO.write(imageTag, suffixName, new File(toPath)); } } catch (FileNotFoundException fe) { fe.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return false; } /** * 按指定比例计算图片压缩后的宽高度 * * @param width 原宽度 * @param height 原高度 * @param multiple 压缩倍数 压缩后的值为 原高度/multiple 或 原宽度/multiple * @return */ public static Map calcRatio(Integer width, Integer height, float multiple) { Map map = Maps.newHashMap(); if (multiple == 1) { map.put("width", width); map.put("height", height); return map; } float toImgWidth = width; //图片压缩后的宽度 float toImgHeight = height; //图片压缩后的高度 if (width > height) //如果宽度超过高度以宽度为准来压缩 { toImgWidth = width / multiple; //图片压缩后的宽度 toImgHeight = height / (float) (width / toImgWidth); //图片压缩后的高度 } else { toImgHeight = height / multiple; //图片压缩后的高度 toImgWidth = width / (float) (height / toImgHeight); //图片压缩后的宽度 } map.put("width", (int) toImgWidth); map.put("height", (int) toImgHeight); return map; } /** * 指定图片最大宽高度计算图片压缩后的宽高度 * * @param width 原宽度 * @param height 原高度 * @param maxWidth 图片宽度最大限制 * @param maxHeight 图片高度最大限制 * @return */ public static Map calcRatio(Integer width, Integer height, Integer maxWidth, Integer maxHeight) { Map map = Maps.newHashMap(); float toImgWidth = width; //图片压缩后的宽度 float toImgHeight = height; //图片压缩后的高度 if (width > height) //如果宽度超过高度以宽度为准来压缩 { if (width > maxWidth) //如果图片宽度超过限制 { toImgWidth = maxWidth; //图片压缩后的宽度 toImgHeight = height / (float) (width / toImgWidth); //图片压缩后的高度 } } else { if (height > maxHeight) { toImgHeight = maxHeight; toImgWidth = width / (float) (height / toImgHeight); } } map.put("width", (int) toImgWidth); map.put("height", (int) toImgHeight); return map; } /** * base64 转图片 * * @param base64String base64字符串 * @param filePath 图片路径 */ public static boolean base64StringToImage(String base64String, String filePath) { try { filePath = StringUtils.convertPath(filePath); return byteToImage(base64StringToByte(base64String), filePath); } catch (Exception e) { e.printStackTrace(); return false; } } /** * byte 转图片 * * @param bytes 图片二进制 * @param filePath 图片路径 */ public static boolean byteToImage(byte[] bytes, String filePath) { if (bytes == null || bytes.length < 1) { return false; } try { filePath = StringUtils.convertPath(java.net.URLDecoder.decode(filePath, "UTF-8")); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); BufferedImage bi1 = ImageIO.read(bais); mkDirs(filePath); File w2 = new File(filePath);//可以是jpg,png,gif格式 ImageIO.write(bi1, "jpg", w2);//不管输出什么格式图片,此处不需改动 return true; } catch (IOException e) { e.printStackTrace(); return false; } } /** * base64 转 byte * * @param base64String base64字符串 */ public static byte[] base64StringToByte(String base64String) { try { if (StringUtils.isBlank(base64String)) { return null; } if (base64String.startsWith("data:image")) { base64String = base64String.substring(base64String.indexOf("base64,") + "base64,".length()); } byte[] bytes = EncodesUitls.decodeBase64(base64String); for (int i = 0; i < bytes.length; ++i) { if (bytes[i] < 0) {// 调整异常数据 bytes[i] += 256; } } return bytes; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 将 BufferedImage 转 Base64 * * @param image */ public static byte[] BufferedImage2Byte(BufferedImage image) { try { ByteArrayOutputStream bs = new ByteArrayOutputStream(); ImageOutputStream imOut = ImageIO.createImageOutputStream(bs); ImageIO.write(image, "png", imOut); InputStream in = new ByteArrayInputStream(bs.toByteArray()); byte[] data = new byte[in.available()]; in.read(data); in.close(); bs.close(); bs = null; imOut.close(); imOut = null; return data; } catch (IOException e) { e.printStackTrace(); logger.debug("Exception--" + e.getMessage()); return null; } catch (Exception e) { logger.debug("Exception--" + e.getMessage()); e.printStackTrace(); return null; } } /** * 将 BufferedImage 转 Base64 * * @param image */ public static String BufferedImage2Base64(BufferedImage image) { try { BASE64Encoder encoder = new BASE64Encoder(); return "data:image/png;base64," + EncodesUitls.encodeBase64(BufferedImage2Byte(image)); } catch (Exception e) { logger.debug("Exception--" + e.getMessage()); e.printStackTrace(); return ""; } } /** * 图片 转 byte * * @param file 图片 */ public static byte[] imageToByte(File file) { try { if (file == null || !file.isFile()) { return null; } else { //要拷贝的图片 Image image = ImageIO.read(file); int width = image.getWidth(null); //图片原宽度 int height = image.getHeight(null); //图片原高度 BufferedImage imageTag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); imageTag.getGraphics().drawImage(image, 0, 0, width, height, null); return BufferedImage2Byte(imageTag); } } catch (FileNotFoundException fe) { fe.printStackTrace(); return null; } catch (Exception e) { e.printStackTrace(); return null; } } /** * 图片 转 Base64 * * @param file 图片 */ public static String imageToBase64(File file) { try { if (file == null || !file.isFile()) { return null; } else { //要拷贝的图片 Image image = ImageIO.read(file); int width = image.getWidth(null); //图片原宽度 int height = image.getHeight(null); //图片原高度 BufferedImage imageTag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); imageTag.getGraphics().drawImage(image, 0, 0, width, height, null); return BufferedImage2Base64(imageTag); } } catch (FileNotFoundException fe) { fe.printStackTrace(); return null; } catch (Exception e) { e.printStackTrace(); return null; } } /** * Byte 转 Base64 * * @param bytes 图片 */ public static String byteToBase64(byte[] bytes) { if (bytes == null || bytes.length < 1) { return null; } try { ByteArrayInputStream bais = new ByteArrayInputStream(bytes); BufferedImage bi1 = ImageIO.read(bais); return BufferedImage2Base64(bi1); } catch (IOException e) { e.printStackTrace(); return null; } } /** * 根据 图片 生产 相应 宽度*高度 缩略图 * * @param imgsrc 原图路径 * @param imgdist 生产缩略图路径 * @param widthdist 生成图片宽度 * @param heightdist 生成图片高度 */ public static void reduceImg(String imgsrc, String imgdist, int widthdist, int heightdist) { try { File srcfile = new File(imgsrc); if (!srcfile.exists()) { return; } Image src = javax.imageio.ImageIO.read(srcfile); BufferedImage tag = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null); tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_AREA_AVERAGING), 0, 0, null); FileOutputStream out = new FileOutputStream(imgdist); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(tag); out.close(); } catch (IOException ex) { ex.printStackTrace(); } }}
阅读全文
0 0
- 获取图片工具类
- 图片处理工具类
- 加载图片工具类
- android 图片工具类
- 图片处理工具类
- 图片处理工具类
- 图片工具类
- 图片转换工具类
- 图片缓存工具类
- 图片切割工具类
- 图片切割工具类
- 图片加载工具类
- ImageUtils-图片工具类
- 图片裁剪工具类
- 图片处理工具类
- 图片缓存工具类
- 图片工具类
- 图片缓存工具类
- 【UVa10498】Happiness-线性规划:单纯形法
- Swift 毛玻璃效果
- iOS 支付宝的使用
- c3p0连接数据库
- Android从外部API获取json数据并以listview形式展现
- 图片工具类
- 汤姆大叔的深入理解JavaScript读后感一(1——16节)
- UIPickerView的使用(三)
- Android中接入腾讯TBS浏览器WebView的入坑指南
- 根据某点直角坐标(x,y)计算该点与原点连线跟y轴夹角
- Android Studio 出现 Gradle's dependency cache may be corrupt 错误及相关下载推荐
- Linux 常用性能分析命令
- 操作系统刷题(十八)
- python练手--自制俄罗斯方块(文末附源码)