`

java压缩图片大小

    博客分类:
  • java
 
阅读更多


package com.xxq.util;
import java.awt.Image;
//旧的jpeg处理类
//import com.sun.image.codec.jpeg.*; 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
import javax.imageio.stream.ImageOutputStream;

import com.sun.imageio.plugins.jpeg.JPEGImageWriter;



/**
 * 
 * @author Administrator
 *
 */
public class ImgCompressUtil {

	/**
	 * log4j
	 */
	private final static Logger logger = Logger.getLogger(ImgCompressUtil.class
			.getName());

	/**
	 * 图片压缩测试
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		// 图片url,压缩后的宽和高
		String url = "D:/111.jpg";
		int w = 700;
		int h = 500;
		//压缩后的图片路径
			String newName = MD5Util.MD5(url);
			String newDir = "D:/";
			String filePath = newDir + newName + "_"
					+ w + "_" + h + url.substring(url.indexOf("."));
		//压缩
		ImgCompress(url,url,w,h);//url,filePath,w,h
	}

	/**
	 * 外部调用方法
	 * @param url
	 * @param w
	 * @param h
	 */
	public static String ImgCompress(String url, String filePath, int w, int h) {
			// 压缩质量 百分比
			float JPEGcompression = 0.7f;

			// 本地图片存储路径
			String name = url.substring(url.lastIndexOf("/") + 1);
						
			// 截取url中最后一个“/”之后的字符串为name
			logger.info("url:===========" + url);
			logger.info("name:=========" + name);
			
			//压缩主方法
			 return ImgCompress(filePath, url, name, w, h, JPEGcompression);
		
	}
	
	/**
	 * 图片压缩主方法
	 * 
	 * @param newDir
	 *            图片所在的文件夹路径
	 * @param file
	 *            图片路径
	 * @param name
	 *            图片名
	 * @param w
	 *            目标宽
	 * @param h
	 *            目标高
	 * @param JPEGcompression
	 *            压缩质量/百分比
	 * @author zhouqz
	 */
	public static String ImgCompress(String filePath, String url, String name,
			int w, int h, float JPEGcompression) {
		File file = new File(url);
		if (!(file.exists() && file.canRead())) {
			filePath = "/var/upload/404.jpg";
		}else{
			try {
				BufferedImage bufferedImage =  ImageIO.read(file);

				int new_w = w;
				int new_h = h; 

				BufferedImage image_to_save = new BufferedImage(new_w, new_h,
						bufferedImage.getType());
				image_to_save.getGraphics().drawImage(
						bufferedImage.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0,
						0, null);
				FileOutputStream fos = new FileOutputStream(filePath); // 输出到文件流

				// 旧的使用 jpeg classes进行处理的方法
				// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);
				// JPEGEncodeParam jep =
				// JPEGCodec.getDefaultJPEGEncodeParam(image_to_save);
				/* 压缩质量 */
				// jep.setQuality(per, true);
				// encoder.encode(image_to_save, jep);

				// 新的方法
				int dpi = 300;//分辨率
				saveAsJPEG(dpi, image_to_save, JPEGcompression, fos);
				//关闭输出流
				fos.close();
				//返回压缩后的图片地址
			} catch (IOException ex) {
				logger.log(Level.SEVERE, null, ex);
				filePath = "/var/upload/404.jpg";
			}
		}
		
		return filePath;
		
	}

	/**
	 * 以JPEG编码保存图片
	 * 
	 * @param dpi
	 *            分辨率
	 * @param image_to_save
	 *            要处理的图像图片
	 * @param JPEGcompression
	 *            压缩比
	 * @param fos
	 *            文件输出流
	 * @throws IOException
	 */
	public static void saveAsJPEG(Integer dpi, BufferedImage image_to_save,
			float JPEGcompression, FileOutputStream fos) throws IOException {

		// useful documentation at
		// http://docs.oracle.com/javase/7/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html
		// useful example program at
		// http://johnbokma.com/java/obtaining-image-metadata.html to output
		// JPEG data

		// old jpeg class
		// com.sun.image.codec.jpeg.JPEGImageEncoder jpegEncoder =
		// com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(fos);
		// com.sun.image.codec.jpeg.JPEGEncodeParam jpegEncodeParam =
		// jpegEncoder.getDefaultJPEGEncodeParam(image_to_save);

		// Image writer
		JPEGImageWriter imageWriter = (JPEGImageWriter) ImageIO
				.getImageWritersBySuffix("jpg").next();
		ImageOutputStream ios = ImageIO.createImageOutputStream(fos);
		imageWriter.setOutput(ios);
		// and metadata
		IIOMetadata imageMetaData = imageWriter.getDefaultImageMetadata(
				new ImageTypeSpecifier(image_to_save), null);

		// if(dpi != null && !dpi.equals("")){
		//
		// //old metadata
		// //jpegEncodeParam.setDensityUnit(com.sun.image.codec.jpeg.JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
		// //jpegEncodeParam.setXDensity(dpi);
		// //jpegEncodeParam.setYDensity(dpi);
		//
		// //new metadata
		// Element tree = (Element)
		// imageMetaData.getAsTree("javax_imageio_jpeg_image_1.0");
		// Element jfif =
		// (Element)tree.getElementsByTagName("app0JFIF").item(0);
		// jfif.setAttribute("Xdensity", Integer.toString(dpi) );
		// jfif.setAttribute("Ydensity", Integer.toString(dpi));
		//
		// }

		if (JPEGcompression >= 0 && JPEGcompression <= 1f) {

			// old compression
			// jpegEncodeParam.setQuality(JPEGcompression,false);

			// new Compression
			JPEGImageWriteParam jpegParams = (JPEGImageWriteParam) imageWriter
					.getDefaultWriteParam();
			jpegParams.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
			jpegParams.setCompressionQuality(JPEGcompression);

		}

		// old write and clean
		// jpegEncoder.encode(image_to_save, jpegEncodeParam);

		// new Write and clean up
		imageWriter.write(imageMetaData,
				new IIOImage(image_to_save, null, null), null);
		ios.close();
		imageWriter.dispose();

	}

}

分享到:
评论

相关推荐

    java压缩图片文件大小

    java 开发压缩图片文件大小,2m--&gt;200k 不是压缩宽高的

    图片压缩,不改变宽高

    使用两中方法进行压缩,可以只改变图片大小,如,原图片100kb,压缩后变成40kb。并且不改变宽高。 一.使用ImageMagick进行压缩类-Aa.java 需要做以下配置: 1.将jmagick.dll加入jdk\bin目录中 2.将jmagick.dll加入到...

    java图片压缩处理(可以压缩为任意大小

    本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要理解图片压缩的基本原理。图片压缩主要有两种类型:有损压缩和无损压缩。有损压缩会牺牲一部分...

    java图片压缩文件大小图片大小(支持gif动态图)

    以下是压缩图片的示例代码: ```java public void compressImage(BufferedImage image, String outputFilePath, int targetWidth, int targetHeight, float quality) throws IOException { ImageOutputStream ...

    java各种方式压缩图片

    以上就是Java中压缩图片的几种常见方法,可以根据项目需求和性能考虑选择合适的方式。在实际应用中,除了调整尺寸,还可以通过设置JPEG的压缩质量来进一步减小文件大小。例如,`ImageIO.write()`方法的第三个参数...

    java压缩上传图片

    根据提供的文件信息,我们可以总结出以下关于“Java压缩上传图片”的相关知识点: ### 1. 知识点一:图片压缩的基本概念 - **定义**:图片压缩是一种减少图像文件大小的技术,通常用于减少存储空间需求或加快网络...

    java代码保存宽高不变压缩图片(失真不大).docx

    在Java中,压缩图片通常是为了减小文件大小,便于存储或传输,而同时尽可能保持图片质量。上述代码提供了一个名为`CompressPicTools`的类,专门用于压缩图片,保持图片原有的宽高比,同时控制压缩后的失真程度。下面...

    java将图片变成指定大小

    在Java编程中,调整图像大小是一项常见的任务,特别是在处理用户上传的图片或优化网站资源时。这个过程通常称为“缩放”图片。本文将详细解释如何使用Java将图片转换为指定大小,无论原始图片尺寸如何。 首先,我们...

    图片大小压缩(java尺寸、质量)

    通过java实现对图片按照尺寸、像素质量实现对图片的压缩处理,并可以对图片制定宽高或者等比压缩

    java图片压缩处理

    java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理java图片压缩处理

    Java 图片压缩

    在Java编程语言中,处理图像是一项常见的任务,其中包括图片压缩。Java提供了丰富的API来...同时,了解不同图片格式的压缩机制以及如何优化图片质量与文件大小之间的平衡,对于提升用户体验和节省存储空间至关重要。

    图片缩放、压缩技术java实现

    本教程将专注于使用Java语言实现图片的等比缩放和压缩技术,以满足存储和传输的需求。下面,我们将深入探讨这些关键知识点。 首先,我们来了解等比缩放。等比缩放是指在改变图片尺寸时,保持其长宽比不变,防止图片...

    java实现上传图片并压缩图片大小功能

    java实现上传图片并压缩图片大小功能 java实现上传图片并压缩图片大小功能是指使用java语言实现上传图片并对其进行压缩处理,以达到减少图片大小的目的。在本文中,我们将详细介绍如何使用java实现上传图片并压缩...

    java高清图片压缩的2种方法

    // 输出压缩后的图片大小 File compressedImage = new File("压缩后图片路径.jpg"); System.out.println("Compressed Image Size: " + compressedImage.length()); } catch (IOException e) { e....

    java压缩图片

    这个场景中提到的“java压缩图片”可能涉及到使用Java的图像处理库,如Java Advanced Imaging (JAI)或者使用Java标准库中的`java.awt.image.BufferedImage`类。以下是对这个主题的详细阐述: 首先,我们需要理解...

    java实现对图片的压缩上传

    二、限制文件的大小,如果是图片则对图片进行压缩,如果是非图片,大于设定则不能上传 upLoad(String uploadPath,String filePath,String fileName,int commitSize,boolean flag) uploadPath代表上传目录,...

    图片压缩(java)将图片压缩后以二进制的形式输出

    * 压缩图片,将图片压缩后以二进制的形式输出 * * @param file * 将要压缩的图片 * @param width * 压缩宽(长度短的做宽) * @param height * 压缩长(长度长的做长) * @return byte[]二进制流 */

    java实现视频压缩

    Java作为一种广泛使用的编程语言,也提供了实现视频压缩的能力。本篇将详细探讨如何使用Java来实现视频压缩,以及涉及到的相关知识点。 首先,我们要理解视频压缩的基本原理。视频是由一帧一帧的静态图像(图片)...

    java web 图片压缩

    - 降质处理通常是为了减小图片大小,提高网页加载速度。这可能涉及到降低颜色位深度、去除透明度、调整压缩质量等。 - 可以通过调整JPEG的质量参数来平衡图片质量和文件大小,或者在保存为PNG时选择合适的颜色模式...

    java处理图片大小等比例缩放,自定义修改图片大小,截取,水印

    在Java编程语言中,处理图片是一项常见的任务,包括调整图片大小、等比例缩放、裁剪、压缩以及添加水印等。以下将详细介绍这些知识点: 1. **等比例缩放图片**: 在Java中,我们可以使用`java.awt.image....

Global site tag (gtag.js) - Google Analytics