java图片上传压缩处理的简介与内容

合集下载

java实现图片像素质量压缩与图片长宽缩放

java实现图片像素质量压缩与图片长宽缩放

java实现图⽚像素质量压缩与图⽚长宽缩放⽬录java 图⽚像素质量压缩与图⽚长宽缩放java 修改图⽚dpi(像素/⼤⼩)java 图⽚像素质量压缩与图⽚长宽缩放今天找到的这个⽅法⽐以前项⽬⽤到的⽅法更好,这⾥记录下,⽅便⽇后使⽤!/*** 缩放图⽚(压缩图⽚质量,改变图⽚尺⼨)* 若原图宽度⼩于新宽度,则宽度不变!* @param newWidth 新的宽度* @param quality 图⽚质量参数 0.7f 相当于70%质量* 2015年12⽉11⽇*/public static void resize(File originalFile, File resizedFile,int newWidth, float quality) throws IOException {if (quality > 1) {throw new IllegalArgumentException("Quality has to be between 0 and 1");}ImageIcon ii = new ImageIcon(originalFile.getCanonicalPath());Image i = ii.getImage();Image resizedImage = null;int iWidth = i.getWidth(null);int iHeight = i.getHeight(null);if(iWidth < newWidth){newWidth = iWidth;}if (iWidth > iHeight) {resizedImage = i.getScaledInstance(newWidth, (newWidth * iHeight)/ iWidth, Image.SCALE_SMOOTH);} else {resizedImage = i.getScaledInstance((newWidth * iWidth) / iHeight,newWidth, Image.SCALE_SMOOTH);}// This code ensures that all the pixels in the image are loaded.Image temp = new ImageIcon(resizedImage).getImage();// Create the buffered image.BufferedImage bufferedImage = new BufferedImage(temp.getWidth(null),temp.getHeight(null), BufferedImage.TYPE_INT_RGB);// Copy image to buffered image.Graphics g = bufferedImage.createGraphics();// Clear background and paint the image.g.setColor(Color.white);g.fillRect(0, 0, temp.getWidth(null), temp.getHeight(null));g.drawImage(temp, 0, 0, null);g.dispose();// Soften.float softenFactor = 0.05f;float[] softenArray = { 0, softenFactor, 0, softenFactor,1 - (softenFactor * 4), softenFactor, 0, softenFactor, 0 };Kernel kernel = new Kernel(3, 3, softenArray);ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);bufferedImage = cOp.filter(bufferedImage, null);// Write the jpeg to a file.FileOutputStream out = new FileOutputStream(resizedFile);// Encodes image as a JPEG data streamJPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage);param.setQuality(quality, true);encoder.setJPEGEncodeParam(param);encoder.encode(bufferedImage);} // Example usagepublic static void main(String[] args) throws IOException {// File originalImage = new File("C:\\11.jpg");// resize(originalImage, new File("c:\\11-0.jpg"),150, 0.7f);// resize(originalImage, new File("c:\\11-1.jpg"),150, 1f);File originalImage = new File("d:\\testImg\\1.jpg");System.out.println("源⽂件⼤⼩" + originalImage.length());// File resizedImg = new File("d:\\testImg\\11.jpg");// resize(originalImage, resizedImg, 850, 1f);// System.out.println("0.5转换后⽂件⼤⼩" + resizedImg.length());// File resizedImg1 = new File("d:\\testImg\\111.jpg");File resizedImg1 = new File("/alidata/zkyj/dashixiong/tempImgFile/11.jpg");resize(originalImage, resizedImg1, 1550, 0.7f);System.out.println("0.7转换后⽂件⼤⼩" + resizedImg1.length());}java 修改图⽚dpi(像素/⼤⼩)import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class DPIHandleHelper {private static int DPI = 300;public static void main(String[] args) {String path = "C:\\test.jpg";File file = new File(path);handleDpi(file, 300, 300);}/*** 改变图⽚DPI** @param file* @param xDensity* @param yDensity*/public static void handleDpi(File file, int xDensity, int yDensity) {try {BufferedImage image = ImageIO.read(file);JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(file)); JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);jpegEncodeParam.setQuality(0.75f, false);jpegEncodeParam.setXDensity(xDensity);jpegEncodeParam.setYDensity(yDensity);jpegEncoder.encode(image, jpegEncodeParam);image.flush();} catch (IOException e) {e.printStackTrace();}}}以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

java中实现压缩图片(指定图片宽度和高度或者压缩比例对图片进行压缩)

java中实现压缩图片(指定图片宽度和高度或者压缩比例对图片进行压缩)

java中实现压缩图⽚(指定图⽚宽度和⾼度或者压缩⽐例对图⽚进⾏压缩)package com.thinkgem.jeesite.test;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;@SuppressWarnings("restriction")public class ReduceImgTest {/*** 指定图⽚宽度和⾼度或压缩⽐例对图⽚进⾏压缩** @param imgsrc 源图⽚地址* @param imgdist ⽬标图⽚地址* @param widthdist 压缩后图⽚的宽度* @param heightdist 压缩后图⽚的⾼度* @param rate 压缩的⽐例*/public static void reduceImg(String imgsrc, String imgdist, int widthdist, int heightdist, Float rate) {try {File srcfile = new File(imgsrc);// 检查图⽚⽂件是否存在if (!srcfile.exists()) {System.out.println("⽂件不存在");}// 如果⽐例不为空则说明是按⽐例压缩if (rate != null && rate > 0) {//获得源图⽚的宽⾼存⼊数组中int[] results = getImgWidthHeight(srcfile);if (results == null || results[0] == 0 || results[1] == 0) {return;} else {//按⽐例缩放或扩⼤图⽚⼤⼩,将浮点型转为整型widthdist = (int) (results[0] * rate);heightdist = (int) (results[1] * rate);}}// 开始读取⽂件并进⾏压缩Image src = ImageIO.read(srcfile);// 构造⼀个类型为预定义图像类型之⼀的 BufferedImageBufferedImage tag = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB);//绘制图像 getScaledInstance表⽰创建此图像的缩放版本,返回⼀个新的缩放版本Image,按指定的width,height呈现图像//Image.SCALE_SMOOTH,选择图像平滑度⽐缩放速度具有更⾼优先级的图像缩放算法。

java上传图片的缩放的方法

java上传图片的缩放的方法

java上传图片的缩放的方法java上传图片的缩放的方法图片上传到服务器后,会根据情况将图片缩小成一个图标,我们可以利用java强大的图形处理功能,对上传的图片进行缩放处理,以下是店铺为大家搜索整理的java上传图片的缩放的方法,希望能给大家带来帮助,下面的程序使用jdk1.4中最新的`ImageIO对图片进行读写.使用AffineTransform对图片进行缩放.import java.io.File;import java.awt.image.BufferedImage;import java.awt.Image;import java.awt.image.AffineTransformOp;import javax.imageio.ImageIO;import java.awt.geom.AffineTransform;public class UploadImg{/*** @param fromdir 图片的原始目录* @param todir 处理后的图片存放目录* @param imgfile 原始图片* @param sysimgfile 处理后的图片文件名前缀**/............................public boolean CreateThumbnail() throws Exception{//ext是图片的格式 gif JPG 或pngString ext="";double Ratio=0.0;File F = new File(fromdir,imgfile);if (!F.isFile())throw new Exception(F+" is not image file error in CreateThumbnail!");//首先判断上传的图片是gif还是JPG ImageIO只能将gif转换为pngif (isJpg(imgfile)){ext="jpg";}else{ext="png";}File ThF = new File(todir,sysimgfile+"."+ext);BufferedImage Bi = ImageIO.read(F);//假设图片宽高最大为120 120Image Itemp = Bi.getScaledInstance (120,120,Bi.SCALE_SMOOTH);if ((Bi.getHeight()>120) || (Bi.getWidth()>120)){if (Bi.getHeight()>Bi.getWidth())Ratio = 120.0/Bi.getHeight();elseRatio = 120.0/Bi.getWidth();}【java上传图片的缩放的方法】。

Java使用Thumbnails对大图片压缩

Java使用Thumbnails对大图片压缩

Java使⽤Thumbnails对⼤图⽚压缩引⾔在最近的项⽬开发中,经常会使⽤到图⽚上传,但是过⼤的图⽚在查看的时候会影响打开速度,浪费流量以及服务器存储空间,所以需要在后端处理完图⽚再上传,这⾥我们⽤到了Thumbnails图⽚处理⼯具类。

Thumbnails主要⽀持以下⼀些功能1、指定⼤⼩进⾏缩放2、按照⽐例进⾏缩放3、不按照⽐例,指定⼤⼩进⾏缩放4、旋转5、⽔印6、裁剪7、转化图⽚格式8、输出到OutputStream9、输出到BufferedImage使⽤步骤:⼀、添加Maven<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>⼆、具体操作1:指定⼤⼩进⾏缩放/*** 指定⼤⼩进⾏缩放** @throws IOException*/private void test1() throws IOException {/** size(width,height) 若图⽚横⽐200⼩,⾼⽐300⼩,不变* 若图⽚横⽐200⼩,⾼⽐300⼤,⾼缩⼩到300,图⽚⽐例不变若图⽚横⽐200⼤,⾼⽐300⼩,横缩⼩到200,图⽚⽐例不变* 若图⽚横⽐200⼤,⾼⽐300⼤,图⽚按⽐例缩⼩,横为200或⾼为300*/Thumbnails.of("images/test.jpg").size(200, 300).toFile("C:/image_200x300.jpg");Thumbnails.of("images/test.jpg").size(2560, 2048).toFile("C:/image_2560x2048.jpg");}2:按照⽐例进⾏缩放/*** 按照⽐例进⾏缩放* scale 图⽚的压缩⽐例值在0-1之间,1f就是原图,0.5就是原图的⼀半⼤⼩ * outputQuality 图⽚压缩的质量值在0-1 之间,越接近1质量越好,越接近0 质量越差 * @throws IOException*/private void test2() throws IOException {/*** scale(⽐例)*/Thumbnails.of("images/test.jpg").scale(0.25f).outputQuality(0.8f).toFile("C:/image_25%.jpg");Thumbnails.of("images/test.jpg").scale(0.75f).outputQuality(0.8f).toFile("C:/image_110%.jpg"); }3:不按照⽐例,指定⼤⼩进⾏缩放/*** 不按照⽐例,指定⼤⼩进⾏缩放** @throws IOExceptionprivate void test3() throws IOException {/*** keepAspectRatio(false) 默认是按照⽐例缩放的*/Thumbnails.of("images/test.jpg").size(120, 120).keepAspectRatio(false).toFile("C:/image_120x120.jpg"); }4:旋转/*** 旋转** @throws IOException*/private void test4() throws IOException {/*** rotate(⾓度),正数:顺时针负数:逆时针*/Thumbnails.of("images/test.jpg").size(1280, 1024).rotate(90).toFile("C:/image+90.jpg");Thumbnails.of("images/test.jpg").size(1280, 1024).rotate(-90).toFile("C:/iamge-90.jpg");}5:⽔印/*** ⽔印** @throws IOException*/private void test5() throws IOException {/*** watermark(位置,⽔印图,透明度)*/Thumbnails.of("images/test.jpg").size(1280, 1024).watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f) .outputQuality(0.8f).toFile("C:/image_watermark_bottom_right.jpg");Thumbnails.of("images/test.jpg").size(1280, 1024).watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f).outputQuality(0.8f).toFile("C:/image_watermark_center.jpg");}6:裁剪/*** 裁剪** @throws IOException*/private void test6() throws IOException {/*** 图⽚中⼼400*400的区域*/Thumbnails.of("images/test.jpg").sourceRegion(Positions.CENTER, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_center.jpg");/*** 图⽚右下400*400的区域*/Thumbnails.of("images/test.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_bootom_right.jpg");/*** 指定坐标*/Thumbnails.of("images/test.jpg").sourceRegion(600, 500, 400, 400).size(200, 200).keepAspectRatio(false).toFile("C:/image_region_coord.jpg");}7:转化图⽚格式/*** 转化图⽚格式** @throws IOException*/private void test7() throws IOException {/*** outputFormat(图像格式)*/Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("png").toFile("C:/image_1280x1024.png");Thumbnails.of("images/test.jpg").size(1280, 1024).outputFormat("gif").toFile("C:/image_1280x1024.gif");}8:输出到OutputStream* 输出到OutputStream** @throws IOException*/private void test8() throws IOException {/*** toOutputStream(流对象)*/OutputStream os = new FileOutputStream("C:/image_1280x1024_OutputStream.png");Thumbnails.of("images/test.jpg").size(1280, 1024).toOutputStream(os);}9:输出到BufferedImage/*** 输出到BufferedImage** @throws IOException*/private void test9() throws IOException {/*** asBufferedImage() 返回BufferedImage*/BufferedImage thumbnail = Thumbnails.of("images/test.jpg").size(1280, 1024).asBufferedImage();ImageIO.write(thumbnail, "jpg", new File("C:/image_1280x1024_BufferedImage.jpg"));}三、对图⽚⽂件进⾏Base64操作/*** 对内存中的图⽚⽂件进⾏Base64处理** @throws IOException*/public String Base64ImageByMemory(BufferedImage pic) {String imgString = "";ByteArrayOutputStream newBaos = new ByteArrayOutputStream();//io流try {ImageIO.write(pic, "jpg", newBaos);//写⼊流中byte[] bytes = newBaos.toByteArray();//转换成字节imgString = URLEncoder.encode(new BASE64Encoder().encode(bytes), "UTF-8");} catch (Exception e) {e.printStackTrace();}return imgString;}四、获取服务器图⽚⽂件⼤⼩/*** 输出到OutputStream** @throws IOException*/public void getImageFileSize(){int size;URLConnection conn;try {String path="";path="https:///pic/a8773912b31bb051c36044e93b7adab44bede0af";//世界地图 //path="http://10.30.23.217:9017/image/0c09ca36-abea-4efa-85b0-99b6d261f66c"; //服务器上图⽚URL url = new URL(path);conn = url.openConnection();size = conn.getContentLength();if (size < 0){System.out.println("Could not determine file size.");}else{System.out.println("The size of file is = " + size + " bytes");BigDecimal filesize = new BigDecimal(size);BigDecimal megabyte = new BigDecimal(1024 * 1024);float returnValue = filesize.divide(megabyte, 2, BigDecimal.ROUND_UP).floatValue();System.out.println("The size of file is = "+returnValue+"M");}conn.getInputStream().close();} catch (IOException e) {e.printStackTrace();}}⾄此,图⽚压缩的相关处理和Base64以及获取服务器⽂件⼤⼩的功能就总结完了!以上就是Java 使⽤Thumbnails对⼤图⽚压缩的详细内容,更多关于java ⼤图⽚压缩的资料请关注其它相关⽂章!。

Java中图片压缩处理

Java中图片压缩处理

Java中图⽚压缩处理整理⽂档,搜刮出⼀个Java做图⽚压缩的代码,稍微整理精简⼀下做下分享。

⾸先,要压缩的图⽚格式不能说动态图⽚,你可以使⽤bmp、png、gif等,⾄于压缩质量,可以通过BufferedImage来指定。

在C盘的temp下放置⼀张图⽚pic123.jpg,尽量找⼀个像素⾼⼀点的图⽚,这⾥我找了⼀张5616*3744的。

package test;import java.io.*;import java.util.Date;import java.awt.*;import java.awt.image.*;import javax.imageio.ImageIO;import com.sun.image.codec.jpeg.*;/*** 图⽚压缩处理* @author 崔素强*/public class ImgCompress {private Image img;private int width;private int height;@SuppressWarnings("deprecation")public static void main(String[] args) throws Exception {System.out.println("开始:" + new Date().toLocaleString());ImgCompress imgCom = new ImgCompress("C:\\temp\\pic123.jpg");imgCom.resizeFix(400, 400);System.out.println("结束:" + new Date().toLocaleString());}/*** 构造函数*/public ImgCompress(String fileName) throws IOException {File file = new File(fileName);// 读⼊⽂件img = ImageIO.read(file); // 构造Image对象width = img.getWidth(null); // 得到源图宽height = img.getHeight(null); // 得到源图长}/*** 按照宽度还是⾼度进⾏压缩* @param w int 最⼤宽度* @param h int 最⼤⾼度*/public void resizeFix(int w, int h) throws IOException {if (width / height > w / h) {resizeByWidth(w);} else {resizeByHeight(h);}}/*** 以宽度为基准,等⽐例放缩图⽚* @param w int 新宽度*/public void resizeByWidth(int w) throws IOException {int h = (int) (height * w / width);resize(w, h);}/*** 以⾼度为基准,等⽐例缩放图⽚* @param h int 新⾼度*/public void resizeByHeight(int h) throws IOException {int w = (int) (width * h / height);resize(w, h);}/*** 强制压缩/放⼤图⽚到固定的⼤⼩* @param w int 新宽度* @param h int 新⾼度*/public void resize(int w, int h) throws IOException {// SCALE_SMOOTH 的缩略算法⽣成缩略图⽚的平滑度的优先级⽐速度⾼⽣成的图⽚质量⽐较好但速度慢BufferedImage image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB );image.getGraphics().drawImage(img, 0, 0, w, h, null); // 绘制缩⼩后的图File destFile = new File("C:\\temp\\456.jpg");FileOutputStream out = new FileOutputStream(destFile); // 输出到⽂件流// 可以正常实现bmp、png、gif转jpgJPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(image); // JPEG编码}}运⾏后在C盘temp下⽣成⼀个465.jpg,像素⼤⼩为600*400,像素⼤⼩是我指定的。

Java实现图片压缩的两种方法

Java实现图片压缩的两种方法

Java实现图⽚压缩的两种⽅法问题背景。

典型的情景:Nemo社区中,⽤户上传的图⽚免不了要在某处给⽤户做展⽰。

如⽤户上传的头像,那么其他⽤户在浏览该⽤户信息的时候,就会需要回显头像信息了。

⽤户上传的原图可能由于清晰度较⾼⽽体积也相对较⼤,考虑⽤户流量带宽,⼀般⽽⾔我们都不会直接体积巨⼤的原图直接丢给⽤户让⽤户慢慢下载。

这时候通常我们会在服务器对图⽚进⾏压缩,然后把压缩后的图⽚内容回显给⽤户。

压缩⽅案:这⾥主要找了两个java中常⽤的图⽚压缩⼯具库:Graphics和Thumbnailator。

1、Graphics:/*** compressImage** @param imageByte* Image source array* @param ppi* @return*/public static byte[] compressImage(byte[] imageByte, int ppi) {byte[] smallImage = null;int width = 0, height = 0;if (imageByte == null)return null;ByteArrayInputStream byteInput = new ByteArrayInputStream(imageByte);try {Image image = ImageIO.read(byteInput);int w = image.getWidth(null);int h = image.getHeight(null);// adjust weight and height to avoid image distortiondouble scale = 0;scale = Math.min((float) ppi / w, (float) ppi / h);width = (int) (w * scale);width -= width % 4;height = (int) (h * scale);if (scale >= (double) 1)return imageByte;BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);ByteArrayOutputStream out = new ByteArrayOutputStream();ImageIO.write(buffImg, "png", out);smallImage = out.toByteArray();return smallImage;} catch (IOException e) {log.error(e.getMessage());throw new RSServerInternalException("");}}重点在于:BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);buffImg.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);2、Thumbnailator:/*** compressImage** @param path* @param ppi* @return*/public static byte[] compressImage(String path, int ppi) {byte[] smallImage = null;try {ByteArrayOutputStream out = new ByteArrayOutputStream();Thumbnails.of(path).size(ppi, ppi).outputFormat("png").toOutputStream(out);smallImage = out.toByteArray();return smallImage;} catch (IOException e) {log.error(e.getMessage());throw new RSServerInternalException("");}}实际测试中,批量的情境下,后者较前者更快⼀些。

java上传图片并压缩图片大小

java上传图片并压缩图片大小

java上传图⽚并压缩图⽚⼤⼩Thumbnailator 是⼀个优秀的图⽚处理的Google开源Java类库。

处理效果远⽐Java API的好。

从API提供现有的图像⽂件和图像对象的类中简化了处理过程,两三⾏代码就能够从现有图⽚⽣成处理后的图⽚,且允许微调图⽚的⽣成⽅式,同时保持了需要写⼊的最低限度的代码量。

还⽀持对⼀个⽬录的所有图⽚进⾏批量处理操作。

⽀持的处理操作:图⽚缩放,区域裁剪,⽔印,旋转,保持⽐例。

另外值得⼀提的是,Thumbnailator⾄今仍不断更新,怎么样,感觉很有保障吧!Thumbnailator官⽹:下⾯我们介绍下如何使⽤Thumbnailator使⽤介绍地址:<!-- 图⽚缩略图 --><dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency>按指定⼤⼩把图⽚进⾏缩放(会遵循原图⾼宽⽐例)//按指定⼤⼩把图⽚进⾏缩和放(会遵循原图⾼宽⽐例)//此处把图⽚压成400×500的缩略图Thumbnails.of(fromPic).size(400,500).toFile(toPic);//变为400*300,遵循原图⽐例缩或放到400*某个⾼度按照指定⽐例进⾏缩⼩和放⼤//按照⽐例进⾏缩⼩和放⼤Thumbnails.of(fromPic).scale(0.2f).toFile(toPic);//按⽐例缩⼩Thumbnails.of(fromPic).scale(2f);//按⽐例放⼤图⽚尺⼨不变,压缩图⽚⽂件⼤⼩//图⽚尺⼨不变,压缩图⽚⽂件⼤⼩outputQuality实现,参数1为最⾼质量Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);我这⾥只使⽤了图⽚尺⼨不变,压缩⽂件⼤⼩源码/**** @Description:保存图⽚并且⽣成缩略图* @param imageFile 图⽚⽂件* @param request 请求对象* @param uploadPath 上传⽬录* @return*/public static BaseResult uploadFileAndCreateThumbnail(MultipartFile imageFile,HttpServletRequest request,String uploadPath) {if(imageFile == null ){return new BaseResult(false, "imageFile不能为空");}if (imageFile.getSize() >= 10*1024*1024){return new BaseResult(false, "⽂件不能⼤于10M");}String uuid = UUID.randomUUID().toString();String fileDirectory = CommonDateUtils.date2string(new Date(), CommonDateUtils.YYYY_MM_DD);//拼接后台⽂件名称String pathName = fileDirectory + File.separator + uuid + "."+ FilenameUtils.getExtension(imageFile.getOriginalFilename());//构建保存⽂件路劲//2016-5-6 yangkang 修改上传路径为服务器上String realPath = request.getServletContext().getRealPath("uploadPath");//获取服务器绝对路径 linux 服务器地址获取当前使⽤的配置⽂件配置//获取服务器绝对路径 linux 服务器地址获取当前使⽤的配置⽂件配置//String urlString=PropertiesUtil.getInstance().getSysPro("uploadPath");//拼接⽂件路劲String filePathName = realPath + File.separator + pathName;("图⽚上传路径:"+filePathName);//判断⽂件保存是否存在File file = new File(filePathName);if (file.getParentFile() != null || !file.getParentFile().isDirectory()) {//创建⽂件file.getParentFile().mkdirs();}InputStream inputStream = null;FileOutputStream fileOutputStream = null;try {inputStream = imageFile.getInputStream();fileOutputStream = new FileOutputStream(file);//写出⽂件//2016-05-12 yangkang 改为增加缓存// IOUtils.copy(inputStream, fileOutputStream);byte[] buffer = new byte[2048];IOUtils.copyLarge(inputStream, fileOutputStream, buffer);buffer = null;} catch (IOException e) {filePathName = null;return new BaseResult(false, "操作失败", e.getMessage());} finally {try {if (inputStream != null) {inputStream.close();}if (fileOutputStream != null) {fileOutputStream.flush();fileOutputStream.close();}} catch (IOException e) {filePathName = null;return new BaseResult(false, "操作失败", e.getMessage());}}// String fileId = FastDFSClient.uploadFile(file, filePathName);/*** 缩略图begin*///拼接后台⽂件名称String thumbnailPathName = fileDirectory + File.separator + uuid + "small."+ FilenameUtils.getExtension(imageFile.getOriginalFilename());//added by yangkang 2016-3-30 去掉后缀中包含的.png字符串if(thumbnailPathName.contains(".png")){thumbnailPathName = thumbnailPathName.replace(".png", ".jpg");}long size = imageFile.getSize();double scale = 1.0d ;if(size >= 200*1024){if(size > 0){scale = (200*1024f) / size ;}}//拼接⽂件路劲String thumbnailFilePathName = realPath + File.separator + thumbnailPathName;try {//added by chenshun 2016-3-22 注释掉之前长宽的⽅式,改⽤⼤⼩// Thumbnails.of(filePathName).size(width, height).toFile(thumbnailFilePathName);if(size < 200*1024){Thumbnails.of(filePathName).scale(1f).outputFormat("jpg").toFile(thumbnailFilePathName);Thumbnails.of(filePathName).scale(1f).outputFormat("jpg").toFile(thumbnailFilePathName);}else{Thumbnails.of(filePathName).scale(1f).outputQuality(scale).outputFormat("jpg").toFile(thumbnailFilePathName); }} catch (Exception e1) {return new BaseResult(false, "操作失败", e1.getMessage());}/*** 缩略图end*/Map<String, Object> map = new HashMap<String, Object>();//原图地址map.put("originalUrl", pathName);//缩略图地址map.put("thumbnailUrl", thumbnailPathName);return new BaseResult(true, "操作成功", map);}获取当前使⽤的配置⽂件信息/*** 根据key从gzt.properties配置⽂件获取配置信息* @param key 键值* @return*/public String getSysPro(String key){return getSysPro(key, null);}/*** 根据key从gzt.properties配置⽂件获取配置信息* @param key 键值* @param defaultValue 默认值* @return*/public String getSysPro(String key,String defaultValue){return getValue("spring/imageserver-"+System.getProperty("spring.profiles.active")+".properties", key, defaultValue); }例://获取服务器绝对路径 linux 服务器地址String urlString=PropertiesUtil.getInstance().getSysPro("uploadPath");package mon.properties;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.Properties;import java.util.concurrent.ConcurrentHashMap;/**** @ClassName PropertiesUtil.java* @Description 系统配置⼯具类* @author caijy* @date 2015年6⽉9⽇上午10:50:38* @version 1.0.0*/public class PropertiesUtil {private Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);private ConcurrentHashMap<String, Properties> proMap;private PropertiesUtil() {private PropertiesUtil() {proMap = new ConcurrentHashMap<String, Properties>();}private static PropertiesUtil instance = new PropertiesUtil();/*** 获取单例对象* @return*/public static PropertiesUtil getInstance(){return instance;}/*** 根据key从gzt.properties配置⽂件获取配置信息* @param key 键值* @return*/public String getSysPro(String key){return getSysPro(key, null);}/*** 根据key从gzt.properties配置⽂件获取配置信息* @param key 键值* @param defaultValue 默认值* @return*/public String getSysPro(String key,String defaultValue){return getValue("spring/imageserver-"+System.getProperty("spring.profiles.active")+".properties", key, defaultValue); }/*** 从配置⽂件中获取对应key值* @param fileName 配置⽂件名* @param key key值* @param defaultValue 默认值* @return*/public String getValue(String fileName,String key,String defaultValue){String val = null;Properties properties = proMap.get(fileName);if(properties == null){InputStream inputStream = PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName);try {properties = new Properties();properties.load(new InputStreamReader(inputStream,"UTF-8"));proMap.put(fileName, properties);val = properties.getProperty(key,defaultValue);} catch (IOException e) {logger.error("getValue",e);}finally{try {if (inputStream != null) {inputStream.close();}} catch (IOException e1) {logger.error(e1.toString());}}}else{val = properties.getProperty(key,defaultValue);}return val;}}。

Java实现图片压缩代码,图片大小转换

Java实现图片压缩代码,图片大小转换

Java实现图⽚压缩代码,图⽚⼤⼩转换在很多项⽬中我们会把上传的图⽚做处理,⽐较图⽚上传过多对服务器的容量和带宽有很多的浪费,如果不是必须的⾼清图⽚,我们可以通过代码来做压缩。

在我的项⽬中我们压缩图⽚的⽬的是让web页⾯打开的速度很快,并且节省空间。

下⾯先分享⼀下代码:package org.util;import javax.imageio.ImageIO;import java.awt.*;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.OutputStream;public class ImgTools {/*** 按照宽⾼⽐例压缩** @param img* @param width* @param height* @param out* @throws IOException*/public static void thumbnail_w_h(File img, int width, int height,OutputStream out) throws IOException {BufferedImage bi = ImageIO.read(img);double srcWidth = bi.getWidth(); // 源图宽度double srcHeight = bi.getHeight(); // 源图⾼度double scale = 1;if (width > 0) {scale = width / srcWidth;}if (height > 0) {scale = height / srcHeight;}if (width > 0 && height > 0) {scale = height / srcHeight < width / srcWidth ? height / srcHeight: width / srcWidth;}thumbnail(img, (int) (srcWidth * scale), (int) (srcHeight * scale), out);}/*** 按照固定宽⾼原图压缩** @param img* @param width* @param height* @param out* @throws IOException*/public static void thumbnail(File img, int width, int height,OutputStream out) throws IOException {BufferedImage BI = ImageIO.read(img);Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.setColor(Color.RED);g.drawImage(image, 0, 0, null); // 绘制处理后的图g.dispose();ImageIO.write(tag, "JPEG", out);}/*** 按照宽⾼裁剪** @param srcImageFile* @param destWidth* @param destHeight* @param out*/public static void cut_w_h(File srcImageFile, int destWidth,int destHeight, OutputStream out) {cut_w_h(srcImageFile, 0, 0, destWidth, destHeight, out);}public static void cut_w_h(File srcImageFile, int x, int y, int destWidth,int destHeight, OutputStream out) {try {Image img;ImageFilter cropFilter;// 读取源图像BufferedImage bi = ImageIO.read(srcImageFile);int srcWidth = bi.getWidth(); // 源图宽度int srcHeight = bi.getHeight(); // 源图⾼度if (srcWidth >= destWidth && srcHeight >= destHeight) {Image image = bi.getScaledInstance(srcWidth, srcHeight,Image.SCALE_DEFAULT);cropFilter = new CropImageFilter(x, y, destWidth, destHeight);img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));BufferedImage tag = new BufferedImage(destWidth, destHeight,BufferedImage.TYPE_INT_RGB);Graphics g = tag.getGraphics();g.drawImage(img, 0, 0, null); // 绘制截取后的图g.dispose();// 输出为⽂件ImageIO.write(tag, "JPEG", out);}} catch (Exception e) {e.printStackTrace();}}// #cut_w_hpublic static void main(String[] args) throws IOException {File img = new File("e:\\a\\a.jpg");FileOutputStream fos = new FileOutputStream("e:\\a\\b.jpg");// ImgTools.thumbnail(img, 100, 100, fos);// ImgTools.cut_w_h(img, 230, 200, fos);ImgTools.thumbnail_w_h(img, 100, 0, fos);}}其实我们很多⼈喜欢在上传的时候就做了限制了,这样在上传时就节省了带宽,可是很多客户是不会做图⽚处理的,5M的⼤图直接就给你上传,限制了说我们做的不⼈性化。

java图片压缩介绍

java图片压缩介绍

java图片压缩介绍java 图片压缩博客分类:•Java基础传进文件传出文件方式的:Java代码19.ImageWriter imgWrier;20.ImageWriteParam imgWriteParams;21.22.// 指定写图片的方式为 jpg23.imgWrier = ImageIO.getImageWritersByFormatName ("jpg").next();24.imgWriteParams = new javax.imageio.plugins.jpeg.JPE GImageWriteParam(null);25.// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT26.imgWriteParams.setCompressionMode(imgWritePara ms.MODE_EXPLICIT);27.// 这里指定压缩的程度,参数qality是取值0~1范围内,28.imgWriteParams.setCompressionQuality((float)0.1);29.imgWriteParams.setProgressiveMode(imgWriteParam s.MODE_DISABLED);30.ColorModel colorModel = ColorModel.getRGBdefault ();31.// 指定压缩时使用的色彩模式32.imgWriteParams.setDestinationType(new javax.imagei o.ImageTypeSpecifier(colorModel, colorModel33..createCompatibleSampleModel(16, 16)));34.35.try36.{37.if(StringUtils.isBlank(srcFilePath))38.{39.return false;40.}41.else42.{(data为传过来的byte[]数组)Java代码3.BufferedImage src = null;4.ByteArrayOutputStream out = null;5.ImageWriter imgWrier;6.ImageWriteParam imgWriteParams;7.8.// 指定写图片的方式为 jpg9.imgWrier = ImageIO.getImageWritersByFormatName ("jpg").next();10.imgWriteParams = new javax.imageio.plugins.jpeg.JPE GImageWriteParam(null);11.// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT12.imgWriteParams.setCompressionMode(imgWritePara ms.MODE_EXPLICIT);13.// 这里指定压缩的程度,参数qality是取值0~1范围内,14.imgWriteParams.setCompressionQuality((float)0.1/data.length);15.16.imgWriteParams.setProgressiveMode(imgWriteParam s.MODE_DISABLED);17.ColorModel colorModel = ColorModel.getRGBdefault ();18.// 指定压缩时使用的色彩模式19.imgWriteParams.setDestinationType(new javax.imagei o.ImageTypeSpecifier(colorModel, colorModel20..createCompatibleSampleModel(16, 16)));21.22.try23.{24.src = ImageIO.read(is);25.out = new ByteArrayOutputStream(data.length);。

Java中的文件压缩与解压缩方法

Java中的文件压缩与解压缩方法

Java中的文件压缩与解压缩方法在日常的开发工作中,文件的压缩与解压缩是一个常见的需求。

Java作为一种广泛使用的编程语言,提供了丰富的类库和方法来实现这一功能。

本文将介绍Java中常用的文件压缩与解压缩方法,并探讨它们的优缺点以及适用场景。

一、文件压缩方法1. Zip压缩Zip是一种常见的文件压缩格式,Java提供了java.util.zip包来实现对Zip文件的压缩和解压缩操作。

使用Zip压缩文件可以将多个文件或文件夹打包成一个压缩文件,方便传输和存储。

在Java中,可以使用ZipOutputStream类来创建一个Zip文件,并使用ZipEntry类来表示Zip文件中的每个文件或文件夹。

下面是一个简单的示例代码:```javaimport java.io.*;import java.util.zip.*;public class ZipUtil {public static void zipFile(String sourceFilePath, String zipFilePath) {try {FileOutputStream fos = new FileOutputStream(zipFilePath);ZipOutputStream zos = new ZipOutputStream(fos);File file = new File(sourceFilePath);zipFile(file, file.getName(), zos);zos.close();fos.close();} catch (IOException e) {e.printStackTrace();}}private static void zipFile(File file, String fileName, ZipOutputStream zos) throws IOException {if (file.isDirectory()) {File[] files = file.listFiles();for (File f : files) {zipFile(f, fileName + "/" + f.getName(), zos);}} else {FileInputStream fis = new FileInputStream(file);ZipEntry zipEntry = new ZipEntry(fileName);zos.putNextEntry(zipEntry);byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) > 0) {zos.write(buffer, 0, len);}fis.close();}}}```上述代码中,zipFile方法用于递归压缩文件夹中的所有文件和子文件夹。

java 实现 png算法无损压缩原理

java 实现 png算法无损压缩原理

Java中实现PNG无损压缩的原理主要依赖于Java内置的ImageIO库,该库支持PNG格式的读写。

在PNG无损压缩中,主要用到了两种技术:预测编码和哈夫曼编码。

1. 预测编码:这是一种通过利用像素之间的相关性来压缩数据的方法。

例如,如果一个像素的值与它周围的像素值有关,那么我们可以用周围的像素值来预测该像素的值,然后将实际值与预测值的差值编码成数据。

因为差值通常比原始数据小得多,所以这样可以大大减少数据的大小。

2. 哈夫曼编码:这是一种无损的数据压缩算法,它通过创建一种称为“哈夫曼树”的数据结构来工作。

哈夫曼树是一种最优前缀编码,它使用尽可能少的位来表示数据。

这意味着一些频繁出现的像素值(如黑色或白色)将使用较短的代码,而不太常见的像素值将使用较长的代码。

这种编码方式可以极大地压缩数据,尤其是对于包含大量重复值的数据。

Java实现的具体代码可能会涉及一些复杂的图像处理和数据结构知识,如果你想深入了解具体的实现过程,我建议查阅相关的书籍或者教程。

你也可以尝试使用一些开源的图像处理库,如OpenCV,这些库通常会提供更高级的图像处理功能和更高效的算法。

java实现图像压缩

java实现图像压缩
g.setColor(new Color(180,180,180));
g.drawRect(this.getWideth() - 120, h - 18,119,17);
g.setColor(new Color(255,102,0));
g.drawString(t, this.getWideth() - 100, h - 5);
tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);
String filePrex = oldFile.substring(0, oldFile.indexOf('.'));
g.drawImage(src, 0, 0, this.getWideth(), h, null);
if(t!=null)
{
g.setColor(new Color(242,242,242));
g.fillRect(this.getWideth() - 120, h - 18,120,18);
return (int) hh;
}
else
{
this.setWideth(w);
return h;
}
}
public void proce(String fpath) throws Exception
{
int h=this.getHeight(wideth,height);
BufferedImage tag = new BufferedImage(this.getWideth(),h,BufferedImage.TYPE_INT_RGB);
Graphics g=tag.getGraphics();

如何在Java中进行文件压缩和解压缩操作

如何在Java中进行文件压缩和解压缩操作

如何在Java中进行文件压缩和解压缩操作文件压缩和解压缩是程序开发中常见的操作,通过压缩可以减小文件的大小,节省存储空间,并且可以快速传输文件。

Java中提供了多种压缩和解压缩文件的方式,如ZipOutputStream和ZipInputStream等类。

本文将详细介绍在Java中进行文件压缩和解压缩的操作步骤和示例代码。

一、文件压缩文件压缩是将一个或多个文件打包成一个压缩文件,常见的压缩文件格式包括zip、tar、gz等。

在Java中,通常使用ZipOutputStream类实现文件压缩操作。

ZipOutputStream类是用于写入ZIP文件的输出流。

1.创建ZipOutputStream对象首先需要创建一个ZipOutputStream对象,用于写入ZIP文件。

可以通过FileOutputStream将ZipOutputStream链接到一个文件,然后就可以向文件中写入压缩数据。

```javaFileOutputStream fos = newFileOutputStream("compressed.zip");ZipOutputStream zos = new ZipOutputStream(fos);```2.添加文件到压缩文件接下来需要将要压缩的文件添加到ZipOutputStream中。

可以通过ZipEntry对象表示压缩文件中的每个文件或目录,并使用putNextEntry方法将文件添加到压缩文件中。

```javaFile file1 = new File("file1.txt");ZipEntry entry1 = new ZipEntry(file1.getName());zos.putNextEntry(entry1);FileInputStream fis1 = new FileInputStream(file1);byte[] buffer = new byte[1024];int length;while ((length = fis1.read(buffer)) > 0) {zos.write(buffer, 0, length);}zos.closeEntry();fis1.close();```3.完成压缩完成文件的添加后,需要关闭ZipOutputStream,以确保压缩文件保存到磁盘。

java压缩图片(只缩小体积,不更改图片尺寸)的示例

java压缩图片(只缩小体积,不更改图片尺寸)的示例

java压缩图⽚(只缩⼩体积,不更改图⽚尺⼨)的⽰例1.情景展⽰ 在调⽤腾讯⾝份证OCR接⼝的时候,由于要求图⽚⼤⼩只能限制在1MB以内,这样,就必须使⽤到图⽚压缩技术2.代码展⽰/*** 图⽚处理⼯具类* @explain* @author Marydon* @creationTime 2019年9⽉3⽇上午10:14:17* @version 1.0* @since* @email marydon20170307@*/public class ImgUtils {/*** 压缩图⽚(通过降低图⽚质量)* @explain 压缩图⽚,通过压缩图⽚质量,保持原图⼤⼩* @param quality* 图⽚质量(0-1)* @return byte[]* 压缩后的图⽚(jpg)* @throws*/public static byte[] compressPicByQuality(byte[] imgByte, float quality) {byte[] imgBytes = null;try {ByteArrayInputStream byteInput = new ByteArrayInputStream(imgByte);BufferedImage image = ImageIO.read(byteInput);// 如果图⽚空,返回空if (image == null) {return null;}// 得到指定Format图⽚的writer(迭代器)Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");// 得到writerImageWriter writer = (ImageWriter) iter.next();// 得到指定writer的输出参数设置(ImageWriteParam )ImageWriteParam iwp = writer.getDefaultWriteParam();// 设置可否压缩iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);// 设置压缩质量参数iwp.setCompressionQuality(quality);iwp.setProgressiveMode(ImageWriteParam.MODE_DISABLED);ColorModel colorModel = ColorModel.getRGBdefault();// 指定压缩时使⽤的⾊彩模式iwp.setDestinationType(new javax.imageio.ImageTypeSpecifier(colorModel, colorModel.createCompatibleSampleModel(16, 16)));// 开始打包图⽚,写⼊byte[]// 取得内存输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();IIOImage iIamge = new IIOImage(image, null, null);// 此处因为ImageWriter中⽤来接收write信息的output要求必须是ImageOutput// 通过ImageIo中的静态⽅法,得到byteArrayOutputStream的ImageOutputwriter.setOutput(ImageIO.createImageOutputStream(byteArrayOutputStream));writer.write(null, iIamge, iwp);imgBytes = byteArrayOutputStream.toByteArray();} catch (IOException e) {System.out.println("write errro");e.printStackTrace();}return imgBytes;}}3.其它代码 import mons.codec.binary.Base64;String imgBase64 = "";try {// 图⽚⼤⼩超过1MBif (file.getSize()/1024 > 1024) {byte[] imgBytes = pressPicByQuality(file.getBytes(),0.1F);imgBase64 = Base64.encodeBase64String(imgBytes);} else {imgBase64 = Base64.encodeBase64String(file.getBytes());}} catch (IOException e1) {e1.printStackTrace();} 说明: ⽣成的base64图⽚没有图⽚格式头,即:data:image/jpeg;base64,4.增加前端代码/*** 拍照或选择图⽚*/this.uploadPicture = function () {// js 获取⽂件对象var fileObj = document.getElementById("file").files[0];if (null == fileObj) {alert("图像上传失败,请重试!");}// TODO 显⽰遮罩// 创建form表单var formFile = new FormData();//加⼊⽂件对象formFile.append("file", fileObj);// 创建XMLHttpRequest 对象var xhr = new XMLHttpRequest();xhr.open("post", baseUrl + "/weixin/facein/upImg3.do", true);xhr.onload = function () {var resData = JSON.parse(this.responseText)// 将返回数据转换成JSON对象var json = eval('(' + resData.data2 + ')');// ⾝份证识别成功if (json.ret == 0) {// TODO 将所需数据填充到页⾯} else {alert("识别失败,请重试!" + json.msg);}document.getElementById("file").value = "";// TODO 隐藏遮罩};// 调⽤腾讯接⼝xhr.send(formFile);};以上就是java 压缩图⽚(只缩⼩体积,不更改图⽚尺⼨)的⽰例的详细内容,更多关于java 压缩图⽚的资料请关注其它相关⽂章!。

java处理图片压缩、裁剪

java处理图片压缩、裁剪

java处理图⽚压缩、裁剪package img;import java.awt.Color;import java.awt.geom.AffineTransform;import java.awt.image.AffineTransformOp;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.imageio.ImageIO;import javax.media.jai.PlanarImage;import mons.io.IOUtils;import com.alibaba.simpleimage.ImageFormat;import com.alibaba.simpleimage.ImageWrapper;import com.alibaba.simpleimage.SimpleImageException;import com.alibaba.simpleimage.render.CropParameter;import com.alibaba.simpleimage.render.ScaleParameter;import com.alibaba.simpleimage.render.WriteParameter;import com.alibaba.simpleimage.render.ScaleParameter.Algorithm;import com.alibaba.simpleimage.util.ImageCropHelper;import com.alibaba.simpleimage.util.ImageReadHelper;import com.alibaba.simpleimage.util.ImageScaleHelper;import com.alibaba.simpleimage.util.ImageWriteHelper;/*** 图⽚的压缩、裁剪*/public class Test {public static void main(String[] args) throws Exception {// 输⼊输出⽂件路径/⽂件String src = "D:\\test\\map.jpg";String dest = "D:\\test\\map1.jpg";File srcFile = new File(src);File destFile = new File(dest);// 将输⼊⽂件转换为字节数组byte[] bytes = getByte(srcFile);// 构造输⼊输出字节流ByteArrayInputStream is = new ByteArrayInputStream(bytes);ByteArrayOutputStream os = new ByteArrayOutputStream();// 处理图⽚zoomAndCut2(is, os, 400, 400);// 将字节输出流写到输出⽂件路径下writeFile(os, destFile);}/*** 按固定长宽进⾏缩放* @param is 输⼊流* @param os 输出流* @param width 指定长度* @param height 指定宽度* @throws Exception*/public static void zoomImage(InputStream is, OutputStream os, int width, int height) throws Exception {//读取图⽚BufferedImage bufImg = ImageIO.read(is);is.close();//获取缩放⽐例double wRatio = width * 1.0/ bufImg.getWidth();double hRatio = height * 1.0 / bufImg.getHeight();AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(wRatio, hRatio), null);BufferedImage bufferedImage = ato.filter(bufImg, null);//写⼊缩减后的图⽚ImageIO.write(bufferedImage, "jpg", os);}/*** 按固定⽂件⼤⼩进⾏缩放* @param is 输⼊流* @param os 输出流* @param size ⽂件⼤⼩指定* @throws Exception*/public static void zoomImage(InputStream is, OutputStream os, Integer size) throws Exception {/*FileInputStream的available()⽅法返回的是int类型,当数据⼤于1.99G(2147483647字节)后将⽆法计量,故求取流⽂件⼤⼩最好的⽅式是使⽤FileChannel的size()⽅法,其求取结果与File的length()⽅法的结果⼀致参考:/chaijunkun/article/details/22387305*/int fileSize = is.available();//⽂件⼤于size时,才进⾏缩放。

java对图片进行压缩和resize缩放的方法

java对图片进行压缩和resize缩放的方法

java对图⽚进⾏压缩和resize缩放的⽅法序这⾥展⽰⼀下如何对图⽚进⾏压缩和resize。

分享给⼤家,具体如下:压缩public static boolean compress(String src,String to, float quality) {boolean rs = true;// Build paramJPEGEncodeParam param = null;// Build encoderFile destination = new File(to);FileOutputStream os = null;try {BufferedImage image = ImageIO.read(new File(src));param = JPEGCodec.getDefaultJPEGEncodeParam(image);param.setQuality(quality, false);os = FileUtils.openOutputStream(destination);JPEGImageEncoder encoder;if (param != null) {encoder = JPEGCodec.createJPEGEncoder(os, param);} else {return false;}encoder.encode(image);} catch(Exception e){e.printStackTrace();rs = false;}finally {IOUtils.closeQuietly(os);}return rs;}resizepublic static boolean resize(String src,String to,int newWidth,int newHeight) {try {File srcFile = new File(src);File toFile = new File(to);BufferedImage img = ImageIO.read(srcFile);int w = img.getWidth();int h = img.getHeight();BufferedImage dimg = new BufferedImage(newWidth, newHeight, img.getType());Graphics2D g = dimg.createGraphics();g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);g.drawImage(img, 0, 0, newWidth, newHeight, 0, 0, w, h, null);g.dispose();ImageIO.write(dimg, "jpg", toFile);} catch (Exception e) {e.printStackTrace();return false;}return true;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

前端开发中的图像处理与图片压缩技术

前端开发中的图像处理与图片压缩技术

前端开发中的图像处理与图片压缩技术在互联网时代,图像处理和图片压缩成为了前端开发中不可忽视的重要技术。

图像作为网站设计的重要元素之一,能够给用户带来直观的视觉体验。

然而,大尺寸的图像文件不仅会占用大量的存储空间,还会导致网页加载速度变慢,影响用户的使用体验。

因此,前端开发人员需要针对图像处理和图片压缩技术进行深入研究,以提高网站性能和用户的使用感受。

一、图像处理技术图像处理技术是指对图像进行操作、调整和优化的过程。

在前端开发中,常见的图像处理技术包括图像裁剪、缩放、旋转、滤镜和水印等。

1. 图像裁剪图像裁剪是指通过选择图像的一部分来获得所需的区域。

在前端开发中,可以利用裁剪技术来实现图片的局部展示,提高页面的可视性和焦点。

2. 图像缩放图像缩放是指改变图像的尺寸大小。

在网页设计中,不同设备和屏幕尺寸的存在,要求前端开发人员对图像进行适当的缩放,以适应不同的显示需求。

3. 图像旋转图像旋转是指改变图像的角度和方向。

在某些特殊的设计需求下,通过对图像进行旋转,可以实现独特的布局效果和视觉呈现。

4. 图像滤镜图像滤镜是指通过应用不同的特效和滤镜效果,改变图像的色彩、亮度和对比度等。

在前端开发中,借助图像滤镜技术,可以让图片更具艺术感和个性化。

5. 水印水印是指在图像上添加文字、标志或透明的图层,起到保护图像版权和识别来源的作用。

前端开发人员可以通过水印技术,确保在互联网上发布的图片得到合理的使用和保护。

二、图片压缩技术图片压缩是指通过减少图像文件的大小,来减小网络传输的开销和提高页面加载速度。

在前端开发中,常见的图片压缩技术包括有损压缩和无损压缩。

1. 有损压缩有损压缩是指在图像压缩过程中会丢失一定的图像细节和质量。

这种压缩方法在保持较高视觉品质的同时,有效地减小了图像文件的大小。

在使用有损压缩时,前端开发人员需要根据实际需求选择合适的压缩比,以兼顾图片质量和网络加载速度。

2. 无损压缩无损压缩是指在图像压缩过程中不会丢失任何图像细节和质量。

java实现上传图片尺寸修改和质量压缩

java实现上传图片尺寸修改和质量压缩

java实现上传图⽚尺⼨修改和质量压缩本⽂实例为⼤家分享了java实现上传图⽚尺⼨修改和质量压缩的具体代码,供⼤家参考,具体内容如下package com.zity.frame.util;/*** 缩略图实现,将图⽚(jpg、bmp、png、gif等等)真实的变成想要的⼤⼩*/import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;import net.sourceforge.pinyin4j.PinyinHelper;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;import .MalformedURLException;import .URL;import .URLConnection;import java.util.Random;/******************************************************************************** 缩略图类(通⽤)本java类能将jpg、bmp、png、gif图⽚⽂件,进⾏等⽐或⾮等⽐的⼤⼩转换。

具体使⽤⽅法* compressPic(⼤图⽚路径,⽣成⼩图⽚路径,⼤图⽚⽂件名,⽣成⼩图⽚⽂名,⽣成⼩图⽚宽度,⽣成⼩图⽚⾼度,是否等⽐缩放(默认为true))*/public class CompressPic {private File file = null; // ⽂件对象private String inputDir; // 输⼊图路径private String outputDir; // 输出图路径private String inputFileName; // 输⼊图⽂件名private String outputFileName; // 输出图⽂件名private int outputWidth = 300; // 默认输出图⽚宽private int outputHeight = 150; // 默认输出图⽚⾼private boolean proportion = true; // 是否等⽐缩放标记(默认为等⽐缩放)public CompressPic() { // 初始化变量inputDir = "";outputDir = "";inputFileName = "";outputFileName = "";outputWidth = 300;outputHeight = 150;}public void setInputDir(String inputDir) {this.inputDir = inputDir;}public void setOutputDir(String outputDir) {this.outputDir = outputDir;}public void setInputFileName(String inputFileName) {this.inputFileName = inputFileName;}public void setOutputFileName(String outputFileName) {this.outputFileName = outputFileName;}public void setOutputWidth(int outputWidth) {this.outputWidth = outputWidth;}public void setOutputHeight(int outputHeight) {this.outputHeight = outputHeight;}public void setWidthAndHeight(int width, int height) {this.outputWidth = width;this.outputHeight = height;}/** 获得图⽚⼤⼩* 传⼊参数 String path :图⽚路径*/public long getPicSize(String path) {file = new File(path);return file.length();}/*** 图⽚处理* @return*/public String compressPic() {try {//获得源⽂件file = new File(inputDir + inputFileName);if (!file.exists()) {return "";}// ⽣成存储路径File outDir = new File(outputDir);if(!outDir.exists()){outDir.mkdirs();}Image img = ImageIO.read(file);// 判断图⽚格式是否正确if(img==null){return "";}if (img.getWidth(null) == -1) {System.out.println(" can't read,retry!" + "<BR>");return "no";} else {int newWidth; int newHeight;// 判断是否是等⽐缩放if (this.proportion == true) {// 为等⽐缩放计算输出的图⽚宽度及⾼度int w =img.getWidth(null);int h = img.getHeight(null);//如果图⽚的宽度⼩于等于250,并且⾼度⼩于等于183,图⽚原样输出if(w<=300){outputWidth=w;}if(h<=150){outputHeight=h;}double rate1 = ((double) img.getWidth(null)) / (double) outputWidth;double rate2 = ((double) img.getHeight(null)) / (double) outputHeight;// 根据缩放⽐率⼤的进⾏缩放控制// double rate = rate1 > rate2 ? rate1 : rate2;// 保证宽度为250pxdouble rate = rate1;newWidth = (int) (((double) img.getWidth(null)) / rate);newHeight = (int) (((double) img.getHeight(null)) / rate2);} else {newWidth = outputWidth; // 输出的图⽚宽度newHeight = outputHeight; // 输出的图⽚⾼度}//重新设置⾼宽为图⽚真实⾼宽,上⾯的⾼宽是其他项⽬需要300*150的,我没得空删掉newWidth = getImgWidth(file);newHeight = getImgHeight(file);BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);/** Image.SCALE_SMOOTH 的缩略算法⽣成缩略图⽚的平滑度的* 优先级⽐速度⾼⽣成的图⽚质量⽐较好但速度慢*/tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null); FileOutputStream out = new FileOutputStream(outputDir + outputFileName);// JPEGImageEncoder可适⽤于其他图⽚类型的转换JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(tag);out.close();}} catch (IOException ex) {ex.printStackTrace();}return "ok";}/*** 图⽚处理⼊⼝* @param inputDir 输⼊图路径* @param outputDir 输出图路径* @param inputFileName 输⼊图名* @param outputFileName 输出图名* @return*/public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName) {// 输⼊图路径this.inputDir = inputDir;// 输出图路径this.outputDir = outputDir;// 输⼊图⽂件名this.inputFileName = inputFileName;// 输出图⽂件名this.outputFileName = outputFileName;return compressPic();}/*** 图⽚处理⼊⼝* @param inputDir 输⼊图路径* @param outputDir 输出图路径* @param inputFileName 输⼊图名* @param outputFileName 输出图名* @param width 输出图宽度* @param height 输⼊图宽度* @param gp 等⽐缩放* @return*/public String compressPic(String inputDir, String outputDir, String inputFileName, String outputFileName, int width, int height, boolean gp) { // 输⼊图路径this.inputDir = inputDir;// 输出图路径this.outputDir = outputDir;// 输⼊图⽂件名this.inputFileName = inputFileName;// 输出图⽂件名this.outputFileName = outputFileName;// 设置图⽚长宽setWidthAndHeight(width, height);// 是否是等⽐缩放标记this.proportion = gp;return compressPic();}/*** 图⽚压缩* @param downloadUrl* @param inputDir* @param outDir* @return*/public String ImageCompression(String downloadUrl,String inputDir,String outDir){Random rnd = new Random();String picName = downloadUrl.substring(stIndexOf("/")+1);String extendName ="";String beforeName= "";if(picName.contains(".")){extendName = picName.substring(picName.indexOf("."));beforeName= picName.substring(0,picName.indexOf("."));}else{extendName = picName;beforeName= picName;}//随机数Integer r = rnd.nextInt(1000);beforeName = new CompressPic().getPinYinHeadChar(beforeName);long ts = System.currentTimeMillis();String outpicName=ts+beforeName+r+".jpg";outpicName = outpicName.replace("%", "");if(outpicName.contains("张栋杰总经理会见旭阳集团董事长杨雪岗")){outpicName="zdjzjlhjxyjtdszyxg.jpg";}if(httpDownload(downloadUrl, inputDir, outpicName)){// 当前时间// String curTime = new Long(System.currentTimeMillis()).toString();pressPic(inputDir, outDir, outpicName, outpicName, 300, 150, true);return outpicName;}else {return null;}}/*** http图⽚下载* @param httpUrl* @param saveFile* @return*/public static boolean httpDownload(String httpUrl,String saveDir,String saveName){// 下载⽹络⽂件int bytesum = 0;int byteread = 0;URL url = null;try {url = new URL(httpUrl);} catch (MalformedURLException e1) {e1.printStackTrace();return false;}// 存储⽬录File outDir = new File(saveDir);if(!outDir.exists()){outDir.mkdirs();}try {URLConnection conn = url.openConnection();InputStream inStream = conn.getInputStream();FileOutputStream fs = new FileOutputStream(saveDir+saveName);byte[] buffer = new byte[1204];while ((byteread = inStream.read(buffer)) != -1) {bytesum += byteread;fs.write(buffer, 0, byteread);}fs.close();inStream.close();} catch (FileNotFoundException e) {e.printStackTrace();return false;} catch (IOException e) {e.printStackTrace();return false;}return true;}/*** 提取每个汉字的⾸字母** @param str* @return String*/public String getPinYinHeadChar(String str) {String convert = "";for (int j = 0; j < str.length(); j++) {char word = str.charAt(j);// 提取汉字的⾸字母String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);if (pinyinArray != null) {convert += pinyinArray[0].charAt(0);} else {convert += word;}}return convert;}public static void main(String[] arg) {CompressPic mypic = new CompressPic();pressPic("C:\\Users\\mazhaoxu\\Desktop\\", "C:\\Users\\mazhaoxu\\Desktop\\", "微信图⽚_20180712182800.png", "2019061818542824511111111111.png");// if(httpDownload("http://221.195.72.44:8122/NR/rdonlyres/B5071DE7-9652-44AF-9534-0EE0ED2DCA92/15177/resource_651768621.jpg", "D:\\data\\resource_651768621.jpg")){ // int start = (int) System.currentTimeMillis(); // 开始时间// pressPic("D:\\data\\", "D:\\data\\", "resource_651768621.jpg", "r1"+start+".jpg", 250, 250, true);// }// String s= mypic.getPinYinHeadChar("http://114.251.186.42:81/web-s/images/1447069462915xfydh1_fb_fb521.jpg");// mypic.ImageCompression("http://114.251.186.42:81/web-s/images/mobile/1447069462915xfydh1_fb_fb521.jpg","d:\\images\\", "d:\\images\\mobile\\");// pressPic("d:\\", "d:\\image\\mobile", "144921941137520151204fgw1747.jpg", "144921941137520151204fgw1747.jpg");// String s = "/image/dslfsjss/image/sisis /image";// System.out.println(s.replace("/image/", "/mobile/image/"));}/*** 获取图⽚宽度* @param file 图⽚⽂件* @return 宽度*/public static int getImgWidth(File file) {InputStream is = null;BufferedImage src = null;int ret = -1;try {is = new FileInputStream(file);src = javax.imageio.ImageIO.read(is);ret = src.getWidth(null); // 得到源图宽is.close();} catch (Exception e) {e.printStackTrace();}return ret;}/*** 获取图⽚⾼度* @param file 图⽚⽂件* @return ⾼度*/public static int getImgHeight(File file) {InputStream is = null;BufferedImage src = null;int ret = -1;try {is = new FileInputStream(file);src = javax.imageio.ImageIO.read(is);ret = src.getHeight(null); // 得到源图⾼is.close();} catch (Exception e) {e.printStackTrace();}return ret;}}这是我⽤的⼯具类,其中⾥⾯业务会⽤到pinyin4j的jar包,和图⽚压缩关系不⼤,可以去除,我是因为⽐较着急改完,就没动,如果不想改,需要引⼊pinyin4j的jar包。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

;tset.reklaweoj.moc egakcap /* 小大的要想成变的实真)等等 fig、gnp、pmb、gpj(片图将�现实图略缩 * **/
/* 径路片图� htap gnirtS 数参入传 * 小大片图得获 * */
} ;thgieh = thgieHtuptuo.siht ;htdiw = htdiWtuptuo.siht { )thgieh tni ,htdiw tni(thgieHdnAhtdiWtes diov cilbup } ;thgieHtuptuo = thgieHtuptuo.siht { )thgieHtuptuo tni(thgieHtuptuOtes diov cilbup } ;htdiWtuptuo = htdiWtuptuo.siht { )htdiWtuptuo tni(htdiWtuptuOtes diov cilbup } ;emaNeliFtuptuo = emaNeliFtuptuo.siht { )emaNeliFtuptuo gnirtS(emaNeliFtuptuOtes diov cilbup } ;emaNeliFtupni = emaNeliFtupni.siht { )emaNeliFtupni gnirtS(emaNeliFtupnItes diov cilbup } ;riDtuptuo = riDtuptuo.siht { )riDtuptuo gnirtS(riDtuptuOtes diov cilbup } ;riDtupni = riDtupni.siht { )riDtupni gnirtS(riDtupnItes diov cilbup } ;001 = thgieHtuptuo ;001 = htdiWtuptuo ;"" = emaNeliFtuptuo ;"" = emaNeliFtupni ;"" = riDtuptuo
} ;)(htgnel.elif nruter ;)htap(eliF = elif { )htap gnirtS(eziSciPteg gnol cilbup
} ;)(ecarTkcatStnirp.xe { )xe noitpecxEOI( hctac } } ;)(esolc.tuo ;)gat(edocne.redocne ;)tuo(redocnEGEPJetaer c.cedoCGEPJ = redocne redocnEegamIGEPJ 换转的型 类片图他其于用适可 redocnEegamIGEPJ // ;)emaNeliFtuptuo + riDtuptuo(maert StuptuOeliF wen = tuo maertStuptuOeliF ;)llun ,0 ,0 ,)HTOOMS_ELACS.egamI ,thgieHwen ,htdiWwen(ecnatsnIdel acSteg.gmi(egamIward.)(scihparGteg.gat /* 慢度速但 好较比量质片图的成生 高度速比级先优 * 的度滑平的片图略缩 成生 法算略缩的 HTOOMS_ELACS.egamI * */
试测 niam //
} ;)(ciPsserpmoc nruter ;pg = noitroporp.siht 记标 放缩比等是否是 // ;)thgieh ,htdiw(thgieHdnAhtdiWtes 宽长片图置设 // ;emaNeliFtuptuo = emaNeliFtuptuo.siht 名件文图出输 // ;emaNeliFtupni = emaNeliFtupni.siht 名件文图入输 // ;riDtuptuo = riDtuptuo.siht 径路图出输 // ;riDtupni = riDtupni.siht 径路图入输 // { )pg naeloo b ,thgieh tni ,htdiw tni ,emaNeliFtuptuo gnirtS ,emaNeliFtupni gnirtS ,riDtuptuo gnirtS ,riDtupni gnirtS(ciPsserpmoc gnirtS cilbup } ;)(ciPsserpmoc nruter ;emaNeliFtuptuo = emaNeliFtuptuo.siht 名件文图出输 // ;emaNeliFtupni = emaNeliFtupni.siht 名件文图入输 // ;riDtuptuo = riDtuptuo.siht 径路图出输 // ;riDtupni = riDtupni.siht 径路图入输 // { )emaNeliFtuptuo gnirtS ,emaNeliFtupni gnirtS ,riDtuptuo gnirtS ,riDtupni gnirtS( ciPsserpmoc gnirtS cilbup } ;"ko" nruter
;2etar : 1etar ? 2etar > 1etar = etar elbuod 制 控放缩行进的大率比放缩据根 // ;1.0 + thgieHtuptuo )elbuod( / ))llun(thgieHte g.gmi )elbuod(( = 2etar elbuod ;1.0 + htdiWtuptuo )elbuod( / ))llun(htdiWte g.gmi )elbuod(( = 1etar elbuod 度高及度 宽片图的出输算计放缩比等为 // { )eurt == noitroporp.siht( fi 放缩比等是否是断判 // ;thgieHwen tni ;htdiWwen tni { esle } ;"on" nruter ;)">RB<" + " !yrter,daer t"nac "(nltnirp.tuo.metsyS { )1- == )llun(htdiWteg.gmi( fi 确正否是式格片图断判 // ;)elif(daer.OIegamI = gmi egamI } ;"" nruter { ))(stsixe.elif!( fi ;)emaNeliFtupni + riDtupni(eliF wen = elif 件文源得获// { yrt { )(ciPsserpmoc gnirtS cilbup 理处片图 //
;"" = riDtupni 量变化始初 // { )(omeDciPsserpmoC cilbup )放缩比等为 认默(记标放缩比等否是 // ;eurt = noitroporp naeloob etavirp 高片图出输认默 // ;001 = thgieHtuptuo tni etavirp 宽片图出输认默 // ;001 = htdiWtuptuo tni etavirp 名件文图出输 // ;emaNeliFtuptuo gnirtS etavirp 名件文图入输 // ;emaNeliFtupni gnirtS etavirp 径路图出输 // ;riDtuptuo gnirtS etavirp 径路图入输 // ;riDtupni gnirtS etavirp 象对件文 // ;llun = elif eliF etavirp { omeDciPsserpmoC ssalc cilbup /* ))eurt 为认默(放缩比等否是,度高片图小成生,度宽片图小成生 ,名文片图小成生,名件文片图大,径路片图小成生,径路片图大(ciPsserpmoc * 法方用使体具 。换转小大的比等非或 比等行进�件文片图 fig、gnp、pmb、gpj 将能类 avaj 本 �用通�类图略缩 * *********** ********************************************************************/
;)BGR_TNI_EPYT.egamIdereffuB ,thgieHwen )tni( ,htdiWwen )tni(( egamIdereffuB wen = gat egamIdereffuB } 度高片图的出输 // ;thgieHtuptuo = thgieHwen 度宽片图的出 输 // ;htdiWtuptuo = htdiWwen { esle } ;)etar / ))llun(thgieHteg.gm i )elbuod((( )tni( = thgieHwen ;)etar / ))llun(htdiWteg.g mi )elbuod((( )tni( = htdiWwen
;redocnEegamIGEPJ.gepj.cedoc.egami.nus.moc tropmi ;cedoCGEPJ.gepj.cedoc.egami.nus.moc tropmi ;OIegamI.oiegami.xavaj tropmi ;noitpecxEOI.oi.avaj tropmi ;maertStuptuOeliF.oi.avaj tropmi ;eliF.oi.avaj tropmi ;egamIdereffuB.egami.twa.avaj tropmi ;egamI.twa.avaj tropmi
} } ;)"秒毫" + tnuoc + "�了用共总"(nltnirp.tuo.metsyS } ;)"BK" + 4201/)"gpj."+i+"1r\tset\:e"(eziSciPteg .cipym + "�小大片图的出输"(nltnirp.tuo.metsyS ;)"秒毫" + er + " :了用使理处缩压片图张" + )1+i( + "第"(nltnirp.tuo.metsyS ;er =+ tnuoc 间时理处成生片图但 // ;trats-dne = er tni 间时束结 // ;)(silliMemiTtnerruc.metsyS )tni( = dne tni ;)eurt ,021 ,021 ,"gpj."+i+"1r" ,"gpj.1" ,"\tset\:e" ,"\:e"(ciPsserpmoc.cipym 间时始开 // ;)(silliMemiTtnerruc.metsyS )tni( = trats tni { )++i ;001 < i ;0 = i tni( rof 间时用所缩压片图部全录记 // ;0 = tnuoc tni ;)"BK" + 4201/)"gpj.1\:e"(ez iSciPteg.cipym + "�小大片图的入输"(nltnirp.tuo.metsyS ;)(omeDciPsserpmoC wen = cipym omeDciPsserpmoC { )gra ][gnirtS(niam diov citats cilbup ))eurt 为认默(放缩比等否是,度高片图小成生,度宽片图小成生,名文片图 小成生,名件文片图大,径路片图小成生,径路片图大(ciPsserpmoc //
相关文档
最新文档