`
sunnymoon
  • 浏览: 89518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

不失真的图片缩放

阅读更多
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import com.mortennobel.imagescaling.ResampleOp;
import org.apache.log4j.Logger;

/**
 * 图片缩放工具类
 * @author sunnymoon
 */
public class MyImage {
	private final Logger log = Logger.getLogger(this.getClass());
	/**
	 * 接收输入流输生成图片
	 * @param input
	 * @param writePath
	 * @param width
	 * @param height
	 * @param format
	 * @return
	 */
	public boolean resizeImage(InputStream input, String writePath,
			Integer width, Integer height, String format) {
		try {
			BufferedImage inputBufImage = ImageIO.read(input);
			log.info("转前图片高度和宽度:" + inputBufImage.getHeight() + ":"+ inputBufImage.getWidth());
			ResampleOp resampleOp = new ResampleOp(width, height);// 转换
			BufferedImage rescaledTomato = resampleOp.filter(inputBufImage,
					null);
			ImageIO.write(rescaledTomato, format, new File(writePath));
			log.info("转后图片高度和宽度:" + rescaledTomato.getHeight() + ":"+ rescaledTomato.getWidth());
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}

	}

	/**
	 * 接收File输出图片
	 * @param file
	 * @param writePath
	 * @param width
	 * @param height
	 * @param format
	 * @return
	 */
	public boolean resizeImage(File file, String writePath, Integer width,
			Integer height, String format) {
		try {
			BufferedImage inputBufImage = ImageIO.read(file);
			inputBufImage.getType();
			log.info("转前图片高度和宽度:" + inputBufImage.getHeight() + ":"+ inputBufImage.getWidth());
			ResampleOp resampleOp = new ResampleOp(width, height);// 转换
			BufferedImage rescaledTomato = resampleOp.filter(inputBufImage,
					null);
			ImageIO.write(rescaledTomato, format, new File(writePath));
			log.info("转后图片高度和宽度:" + rescaledTomato.getHeight() + ":"+ rescaledTomato.getWidth());
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}

	}

	/**
	 * 接收字节数组生成图片
	 * @param RGBS
	 * @param writePath
	 * @param width
	 * @param height
	 * @param format
	 * @return
	 */
	public boolean resizeImage(byte[] RGBS, String writePath, Integer width,
			Integer height, String format) {
		InputStream input = new ByteArrayInputStream(RGBS);
		return this.resizeImage(input, writePath, width, height, format);
	}

	public byte[] readBytesFromIS(InputStream is) throws IOException {
		int total = is.available();
		byte[] bs = new byte[total];
		is.read(bs);
		return bs;
	}
	
	//测试:只测试了字节流的方式,其它的相对简单,没有一一测试
	public static void main(String[] args) throws IOException {
		
		
		int width = 150;
		int height = 150;
		File inputFile = new File("F:\\from.jpg");
		File outFile = new File("F:\\to.jpg");
		String outPath = outFile.getAbsolutePath();
		MyImage myImage = new MyImage();
		InputStream input = new FileInputStream(inputFile);
		byte[] byteArrayImage=myImage.readBytesFromIS(input);
		input.read(byteArrayImage);
		myImage.resizeImage(byteArrayImage, outPath, width, height, "jpg");
	}
}

包下载地址:http://code.google.com/p/java-image-scaling/

4
4
分享到:
评论
9 楼 xiaoxin5230 2010-11-11  
请问这个开源包邮没有增加水印的功能呢
8 楼 sunnymoon 2010-11-04  
sunnymoon 写道
gaobusi 写道
确实是不失真!但是有没有能打到等比例缩放的!
不过等比例缩放应该不难实现!



根据大小去自行判断,还有,保证缩放有时需要截取,比如一个3:4的图片,你想缩放成1:4的,就需要舍掉一部分了



可以这样

ResampleOp resampleOp = new ResampleOp(Math.min(width, inputBufImage.getWidth()), Math.min(height, inputBufImage.getHeight()));// 转换   
7 楼 sunnymoon 2010-11-04  
gaobusi 写道
确实是不失真!但是有没有能打到等比例缩放的!
不过等比例缩放应该不难实现!



根据大小去自行判断,还有,保证缩放有时需要截取,比如一个3:4的图片,你想缩放成1:4的,就需要舍掉一部分了
6 楼 gaobusi 2010-10-29  
确实是不失真!但是有没有能打到等比例缩放的!
不过等比例缩放应该不难实现!
5 楼 gavinsun2008 2010-09-14  
com.mortennobel.imagescaling.ResampleOp 包参看
http://code.google.com/p/java-image-scaling/
作者是一个应用
4 楼 HappyRule 2010-05-19  
com.mortennobel.imagescaling.ResampleOp
请问楼主这个类是你自己的吗?怎么写,
3 楼 sunnymoon 2009-12-17  
是宿小不失真。
2 楼 qinzy 2009-12-17  
com.mortennobel.imagescaling.ResampleOp
是你自己的包?
1 楼 aidiyuxin 2009-12-17  
怎么保证放大不失真的?

相关推荐

    js控制图片缩放 不失真 获取图片真实长和宽

    在JavaScript中,实现图片的等比例缩放以保持不失真是一项常见的需求,特别是在网页设计和动态展示中。这里我们将深入探讨如何实现这一功能,并解决图片在切换时保持正确比例的问题。 首先,我们要明白图片不失真的...

    c# 图片缩放不失真

    c# 图片缩放不失真,新建c#项目,将工具类拷入,直接调用方法。

    js按比例缩放图片,不变形,不失真

    "js按比例缩放图片,不变形,不失真"是一个常见的需求,特别是在用户上传图片或者在页面中显示不同尺寸的图片时。传统的做法是直接设定图片的高度或宽度,但这往往会导致图片比例失衡,产生变形和失真的现象。本篇...

    易语言图片无损缩放

    无损缩放是指在调整图像大小的同时,保持原有的图像质量,不会因为缩放过程引入像素失真。这通常通过更复杂的算法来实现,比如双线性插值或最近邻插值等。 在易语言中,实现图片无损缩放主要涉及到以下几个关键步骤...

    不失真放大图片的软件

    在图像处理领域,不失真放大是一项关键的技术,它旨在增加图片尺寸而不引入明显的像素化或质量损失。"不失真放大图片的软件" 提供了一种高效解决方案,让用户能够轻松地提高图片的分辨率,同时保持原有的清晰度和...

    不失真的图片浏览软件

    传统的图片缩放方法往往会导致图像失真,因为它们简单地扩展或收缩像素,使得细节变得模糊。然而,高级的图片浏览软件如我们这里提到的,采用更复杂的算法,如S-Spline Max、Bicubic或Lanczos等,这些算法在放大图片...

    图像放大软件,不失真

    在图像处理领域,"不失真"的图像放大是一项关键技术。标题和描述中提到的"图像放大软件,不失真"指的是能够将图像放大而不会导致明显的像素化或质量损失的软件工具。这种技术对于需要放大图像但又希望保持原始图像...

    超简单的无失真缩小图片C++代码

    超简单的无失真缩小图片C++代码,基于GDI开发,无外部依赖库;适用于Windows程序开发

    c#实现图像的缩小和放大,不失真!

    scaledImage.Save("缩放后图片路径"); ``` 8. **释放资源**:记得释放不再使用的对象,如Graphics和Bitmap。 ```csharp g.Dispose(); originalImage.Dispose(); scaledImage.Dispose(); ``` 以上就是使用C#实现...

    图片缩放图片缩放

    在Authorware这个强大的多媒体创作工具中,图片缩放是一个常用的操作,它可以帮助用户根据需要调整图像的大小,适应不同的展示需求。以下将详细介绍如何在Authorware中进行图片缩放以及相关的知识点。 一、...

    MFC图片缩放实例

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Class Library)进行图片缩放操作,特别是在将图片缩放以适应背景上的应用场景。MFC是微软为Windows开发的应用程序提供的一套C++类库,它极大地简化了...

    JQuery实现图片缩放

    在图片缩放的场景中,我们可能需要通过`attr()`来获取图片的原始宽度和高度,以便进行比例计算。 要实现图片的缩放,我们首先要考虑的是保持图片的原始比例,防止拉伸变形。这通常涉及到两个关键的属性:`width`和`...

    关于图片缩放的若干问题的解决

    在IT领域,图片缩放是一项常见的图像处理任务,它涉及到图像的分辨率调整、尺寸变换以及保持图像质量等关键因素。本文将深入探讨关于图片缩放的若干问题及其解决方案。 首先,我们要理解图片缩放的基本原理。图片是...

    matlab图片缩放代码.zip

    在图像处理领域,图片缩放是一项常见的操作,用于调整图像的尺寸以适应不同的显示或分析需求。本压缩包“matlab图片缩放代码.zip”提供了一组MATLAB代码,包括最近邻插值(singlelineal.m)、双线性插值(double.m)...

    图片缩放算法原理

    【图片缩放算法原理】 图片缩放是计算机图形学中常见的操作,用于调整图像的尺寸,使其适应不同的显示需求。图像缩放分为放大和缩小,通常涉及到像素级别的处理。这里我们将探讨一种常用的图像缩放算法——双线性内...

    图片缩放实现

    本文将详细讨论如何实现图片的缩放功能,基于提供的"图片缩放实现"的标题和描述,我们可以推断这是一个关于图片缩放效果的示例项目,名为"imageViewdemo"。 图片缩放涉及到图像处理的基本概念,主要目标是调整图片...

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

    EGCodec.createJPEGEncoder(out); JPEGEncodeParam param = ...总的来说,这段Java代码提供了一个实用的工具,能够在不失真过大(通过调整压缩质量)的前提下,根据图片原始大小智能地压缩图片,满足不同场景的需求。

    cropper制作图片裁剪不失真

    `Cropper.js` 是一个优秀的JavaScript库,专门用于实现高精度和灵活性的图片裁剪功能,它确保了裁剪后的图片不失真,因此非常适合用于制作 Banner、头像等应用场景。在本文中,我们将深入探讨`Cropper.js`的相关知识...

    phpqrcode生成带logo二维码,logo图标缩放不失真不变形源代码

    2. 图像处理,特别是如何在缩放时不破坏图像的原始比例,防止失真或变形。 3. 二维码与logo的组合,包括logo的定位、大小调整和透明度控制。 4. PHP编程技巧,如文件操作、图像处理函数的使用等。 了解这些知识点后...

Global site tag (gtag.js) - Google Analytics