- 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");
- }
- }
java图片缩放不失真(收集)
最新推荐文章于 2025-02-28 00:15:00 发布