图片压缩、编辑、剪切
来源:互联网 发布:做java培训讲师怎么样 编辑:程序博客网 时间:2024/04/30 18:16
图片压缩、编辑、剪切。什么都不说了,直接上代码:
“` python
package com.smartdoer.utils;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.multipart.MultipartFile;
public class ImgEditor {
/** * 改变图片尺寸 * @param srcFileName 源图片路径 * @param tagFileName 目的图片路径 * @param width 修改后的宽度 * @param height 修改后的高度 */ public void zoomImage(String srcFileName,String tagFileName,int width,int height){ try { BufferedImage bi = ImageIO.read(new File(srcFileName)); BufferedImage tag=new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(bi, 0, 0, width, height, null); ImageIO.write(tag, "jpg", new File(tagFileName));//画图 } catch (IOException e) { e.printStackTrace(); } } /** * 缩放图像(按高度和宽度缩放) * @param srcImageFile 源图像文件地址 * @param result 缩放后的图像地址 * @param height 缩放后的高度 * @param width 缩放后的宽度 * @param bb 比例不对时是否需要补白:true为补白; false为不补白; */ public void scale(String srcImageFile, String result, int height, int width, boolean bb) { try { 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() > height) || (bi.getWidth() > width)) { 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, width, height); if (width == itemp.getWidth(null)) g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null); else g.drawImage(itemp, (width - 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(); } } /** * 图像切割(按指定起点坐标和宽高切割) * @param srcImageFile 源图像地址 * @param result 切片后的图像地址 * @param x 目标切片起点坐标X * @param y 目标切片起点坐标Y * @param width 目标切片宽度 * @param height 目标切片高度 */ public void cut(String srcImageFile, String result, int x, int y, int width, int height) { try { // 读取源图像 BufferedImage bi = ImageIO.read(new File(srcImageFile)); int srcWidth = bi.getHeight(); // 源图宽度 int srcHeight = bi.getWidth(); // 源图高度 if (srcWidth > 0 && srcHeight > 0) { Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT); // 四个参数分别为图像起点坐标和宽高 // 即: CropImageFilter(int x,int y,int width,int height) ImageFilter cropFilter = new CropImageFilter(x, y, width, height); Image img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter)); BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(img, 0, 0, width, height, null); // 绘制切割后的图 g.dispose(); // 输出为文件 ImageIO.write(tag, "JPEG", new File(result)); } } catch (Exception e) { e.printStackTrace(); } } /** * 图片裁剪 * @param srcImageFile 图片裁剪地址 * @param result 图片输出文件夹 * @param destWidth 图片裁剪宽度 * @param destHeight 图片裁剪高度 */ @SuppressWarnings("rawtypes") public void cutImage(String srcImageFile, String result, int x,int y, int destWidth, int destHeight) { try { Iterator iterator = ImageIO.getImageReadersByFormatName("JPEG");/*PNG,BMP*/ ImageReader reader = (ImageReader)iterator.next();/*获取图片尺寸*/ InputStream inputStream = new FileInputStream(srcImageFile); ImageInputStream iis = ImageIO.createImageInputStream(inputStream); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); Rectangle rectangle = new Rectangle(x,y, destWidth, destHeight);/*指定截取范围*/ param.setSourceRegion(rectangle); BufferedImage bi = reader.read(0,param); ImageIO.write(bi, "JPEG", new File(result)); } catch (Exception e) { e.printStackTrace(); } } //获得文件名字 public String getFileName(MultipartFile file, HttpServletRequest request,HttpSession session){ String FILE_PATH = session.getServletContext().getRealPath("/") + "upload"; String fileName = file.getOriginalFilename(); String[] suffixNameArr = fileName.split("\\."); String suffixName = suffixNameArr[suffixNameArr.length-1]; String userName = SecurityContextHolder.getContext().getAuthentication().getName(); return getTime() + userName+"."+suffixName; } //文件上传,返回文件路径 public String uploadFile(MultipartFile file, HttpServletRequest request,HttpSession session) throws IOException { String FILE_PATH = session.getServletContext().getRealPath("/") + "upload"; String fileName = getFileName(file,request,session); File tempFile = new File(FILE_PATH, fileName); if (!tempFile.getParentFile().exists()) { tempFile.getParentFile().mkdir(); } if (!tempFile.exists()) { tempFile.createNewFile(); } file.transferTo(tempFile); //将上传文件写到服务器上指定的文件。 return FILE_PATH + "\\" + tempFile.getName(); } /* public static File getFile(String fileName) { return new File(FILE_PATH, fileName); } */ public String getTime(){ Date date = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式 String nowTime = df.format(date).toString(); return nowTime; } public static void main(String[] args){ ImgEditor id = new ImgEditor(); id.cut("E:\\photo\\IMG_20161223_722039.jpg", "E:\\photo\\cated.jpg",0,0, 266, 266); }
}
- 图片压缩、编辑、剪切
- java 剪切 压缩 图片
- 剪切 压缩图片
- jcrop 图片压缩剪切
- 图片上传在线剪切编辑
- Html5图片压缩与剪切
- anroid 拍照调用相册 剪切编辑图片
- iOS 图片编辑——缩放剪切
- ios 之 图片压缩 与剪切
- 图片工具类(图片上传、压缩、旋转、剪切)
- 补充上次发的 图片压缩 剪切功能
- ava 图片压缩 剪切 水印 转换 黑白 缩放
- SpringMVC上传图片并压缩及剪切demo
- java 图片压缩 剪切 水印 转换 黑白 缩放
- 图片剪切
- 图片剪切
- 图片剪切
- 图片剪切
- java调用百度地图api接口---转换非百度坐标和根据百度坐标转换地理位置
- (二)pod install vs. pod update (原文翻译)
- Caffe1.0.0安装 编译 - Ubuntu 14.04
- 嵌入式系统编程风格的建立与学习
- linux下如何安装配置redis及主从配置
- 图片压缩、编辑、剪切
- 婚姻:多么庆幸,没有在最美丽的年华遇见你......
- shell脚本加载数据文件到hive表中
- 简单配置使用Redis
- java多线程之线程同步
- scala的类型系统
- 如何彻底删除hao123的桌面快捷方式
- BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡
- Spark统一内存管理模型UnifiedMemoryManager