图片处理降低失真
来源:互联网 发布:sql的九个常用语句 编辑:程序博客网 时间:2024/04/30 02:32
之前写过关于图片生成缩略图的东西,后来发现压缩效果不是太好,已经变形;研究了并收索代码用以下处理方法极大提高图片质量
package util.info.piccut;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.FileOutputStream;import java.io.IOException;import util.info.ImageUtil;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class ZoomImage {public static void ZoomTheImage(String fileUrl, String newUrl, int width,int height) {java.io.File file = new java.io.File(fileUrl); // 读入刚才上传的文件Image src = null;try {src = javax.imageio.ImageIO.read(file);// 构造Image对象BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// tag.getGraphics().drawImage(src, 0, 0, width, height, null); //// 绘制缩小后的图tag.getGraphics().drawImage(src.getScaledInstance(width, height, Image.SCALE_SMOOTH),0, 0, null);FileOutputStream newimage = new FileOutputStream(newUrl); // 输出到文件流JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);jep.setQuality((float) 1.0, true);encoder.encode(tag, jep);newimage.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String args[]) {ZoomImage zoomImage = new ZoomImage();zoomImage.ZoomTheImage("E:\\Workspaces\\qhedu\\WebRoot\\test\\temp\\5ccd8264-e38c-4c8a-8fac-f5bf180e4d38.jpg","E:\\Workspaces\\qhedu\\WebRoot\\test\\temp\\5ccd8264-e38c-4c8a-8fac-f5bf180e4d382.jpg",252, 189);}}
顺便再来个裁剪的代码,由网上代码修改而来package util.info;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;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.FileOutputStream;import java.io.IOException;import java.io.InputStream;import javax.imageio.ImageIO;import javax.imageio.stream.ImageInputStream;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;/** * 图像裁剪以及压缩处理工具类 * * 提供基于JDK Image I/O 的解决方案(JDK探索失败) * * * @author * @since 1.0 */public class ImageUtil {// 输出打印日志public static boolean IS_DEBUG = true;/** * * @param srcImg * 原图片路径 * @param destImg * 输出图片路径 * @param left * 左边距 * @param top * 上边距 * @param width * 截剪宽度 * @param height * 截剪高度 * @return * @throws IOException */public static boolean cutImage(String srcImg, String destImg, int left,int top, Integer width, Integer height) throws IOException {if (destImg == null || destImg.trim().length() == 0) {if (IS_DEBUG) {System.err.println("图片截剪:输出图片路径[" + destImg + "]错误。。。");}return false;}File file = new File(srcImg);if (file == null || file.exists() == false || file.isFile() == false) {if (IS_DEBUG) {System.err.println("图片截剪:[" + srcImg + "]文件不存在。。。");}return false;}return cutImage(javax.imageio.ImageIO.read(file), destImg, left, top,width, height);}/** * * @param input * 原图片输入流 * @param destImg * 输出图片路径 * @param left * 左边距 * @param top * 上边距 * @param width * 截剪宽度 * @param height * 截剪高度 * @return * @throws IOException */public static boolean cutImage(InputStream input, String destImg, int left,int top, Integer width, Integer height) throws IOException {if (destImg == null || destImg.trim().length() == 0) {if (IS_DEBUG) {System.err.println("图片截剪:输出图片路径[" + destImg + "]错误。。。");}return false;}if (input == null) {if (IS_DEBUG) {System.err.println("图片截剪:输入流为空。。。");}return false;}return cutImage(javax.imageio.ImageIO.read(input), destImg, left, top,width, height);}/** * * @param imginput * 原图片输入流 * @param destImg * 输出图片路径 * @param left * 左边距 * @param top * 上边距 * @param width * 截剪宽度 * @param height * 截剪高度 * @return * @throws IOException */public static boolean cutImage(ImageInputStream imginput, String destImg,int left, int top, Integer width, Integer height)throws IOException {if (destImg == null || destImg.trim().length() == 0) {if (IS_DEBUG) {System.err.println("图片截剪:输出图片路径[" + destImg + "]错误。。。");}return false;}if (imginput == null) {if (IS_DEBUG) {System.err.println("图片截剪:图片输入流为空。。。");}return false;}return cutImage(javax.imageio.ImageIO.read(imginput), destImg, left,top, width, height);}public static boolean cutImage(Image srcImage, String destImg, int left,int top, Integer width, Integer height) throws IOException {if (destImg == null || destImg.trim().length() == 0) {if (IS_DEBUG) {System.err.println("图片截剪:输出图片路径[" + destImg + "]错误。。。");}return false;}if (srcImage == null) {if (IS_DEBUG) {System.err.println("图片截剪:源图不是有效的图片。。。");}return false;}StringBuffer sb = null;boolean params_error = false;if (IS_DEBUG) {sb = new StringBuffer("图片截剪:");}int src_w = srcImage.getWidth(null); // 源图宽int src_h = srcImage.getHeight(null);// 源图高if (left < 0 || left >= src_w) {if (IS_DEBUG) {sb.append("左边距超出原图有效宽度! ");}params_error = true;}if (top < 0 || top >= src_h) {if (IS_DEBUG) {sb.append("上边距超出原图有效高度! ");}params_error = true;}if (width != null && width <= 0) {if (IS_DEBUG) {sb.append("截剪宽度不能小于或等于 0 ! ");}params_error = true;}if (height != null && height <= 0) {if (IS_DEBUG) {sb.append("截剪高度不能小于或等于 0 ! ");}params_error = true;}if (params_error) {if (IS_DEBUG) {System.err.println(sb.toString());}return false;}// 目标图片宽if (width == null || width > src_w || width + left > src_w) {width = src_w - left;}// 目标图片高if (height == null || height > src_h || height + top > src_h) {height = src_h - top;}// 目标图片ImageFilter cropFilter = new CropImageFilter(left, top, width, height);Image cutImage = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(srcImage.getSource(), cropFilter));// 重绘图片BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(cutImage.getScaledInstance(width, height, Image.SCALE_SMOOTH),0, 0, null); // 绘制缩小后的图g.dispose();// 输出为文件FileOutputStream out = new FileOutputStream(destImg);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);jep.setQuality((float) 1.0, true);encoder.encode(tag, jep);out.close();if (IS_DEBUG) {System.out.println("图片截剪:原图片宽高为[" + src_w + " × " + src_h+ "],输出图片的宽高为[" + width + " × " + height + "].");}return true;}/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {ImageUtil.cutImage(ImageIO.read(new File("E:\\Workspaces\\qhedu\\WebRoot\\test\\temp\\5ccd8264-e38c-4c8a-8fac-f5bf180e4d382.jpg")),"D:\\t2.jpg", 15, 20, 110, 150);}}
- 图片处理降低失真
- 图片处理失真处理
- 图片 剪切 水印 失真 处理
- php绘图图片失真问题处理
- SetStretchBltMode() 防止图片失真
- ListView显示图片失真
- StretchBlt()压缩图片失真
- 图片压缩不失真
- 不失真缩放图片
- PS 图片失真
- 【c#】imagelist图片失真
- ios 图片缩放 失真
- VC 解决图片失真问题
- 图片不失真比例缩放
- IPicture::Render显示图片失真
- ImageList的图片失真问题
- 图片无失真放大工具
- 解决StretchBlt()压缩图片失真
- 用NDB Cluster替代Mysql Memory存储
- 寻路人
- 关于DM36x IPNC中IRCUT的使用
- vi编辑器的使用方法
- Mysql存储过程和函数的区别
- 图片处理降低失真
- jwplayer流播放,影藏播放地址
- Linux下Apache网站目录读写权限的设置
- 黑马程序员-------基础加强2
- SQL函数说明大全
- Linux-HA开源软件Heartbeat(安装篇)
- Java开发中的23种设计模式之一:工厂方法模式(Factory Method)
- HRBUST 1365 预处理+二分+?
- jaguar连接数据库超过255字符就截断问题解决