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/
分享到:
相关推荐
1--控制一张图片等比例缩放容易 ,不失真 2--控制多张图片切换时每张图片保持等比例缩放,不失真
c# 图片缩放不失真,新建c#项目,将工具类拷入,直接调用方法。
图片如果直接限制其高度或宽度,就会使图片变形,失真 这里提供按比例缩放图片解决的这个问题 js文件很小,只有0.5KB 但是这个还有其他方法,就是上传的时候按比例生产缩略图
一个可以不失真放大图片的软件,大家可以下载评价一下!
易语言图片无损缩放源码,图片无损缩放,位图_转_像素组,像素组_转_位图,像素组_取_某点颜色,像素组_置_某点颜色,像素组_缩放图片_快速,像素组_缩放图片_无损,加入_RGB,RGB_整数
超简单的无失真缩小图片C++代码,基于GDI开发,无外部依赖库;适用于Windows程序开发
小小的VC6.0版的BMP浏览器,图片缩放后不会是真哦。 保证好用!!
图像放大软件 放大软件不失真 完美图像工具
phpqrcode生成带logo二维码,logo图标缩放不失真不变形源代码
java 图片缩放处理 ,图片压缩后失真很小.可自定义压缩后图片的质量
java代码保存宽高不变压缩图片(失真不大),按照文件大小,进行压缩质量控制
主要介绍了PHP自定义图片缩放函数实现等比例不失真缩放的方法,结合实例形式分析了php图片缩放函数的功能实现与使用技巧,需要的朋友可以参考下
主要介绍了php实现等比例不失真缩放上传图片的方法,结合实例形式分析了php基于自定义函数实现等比例不失真缩放上传图片的具体功能定义与使用方法,需要的朋友可以参考下
微信小程序 实现canvas按照原图等比例不失真绘制海报图并保存海报图片到本地相册
本资源包含一个MyLabel.cpp和MyLabel.h,是一个继承自QLabel的自定义Label,实现的功能是使其上的图片可以无失真的缩放。
图片处理继续 实现等比缩放 大小控制 使用java实现 希望对大家有帮助
JS按照图片比例缩放,截图图片中间部分,仿人人相册缩略图效果,保证图片不失真 JS按照图片比例缩放,截图图片中间部分,仿人人相册缩略图效果,保证图片不失真