java图片裁剪压缩修改背景.txt
package org.song.springbootsocket.utils;
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;
/**
* @author JiaLiLue
* @desc 图片工具类
* @create 2017-07-05 21:29
**/
public class ImageUtils {
public static void main(String[] a) throws IOException {
File img = new File("E:/test/1.jpg");
FileOutputStream fos = new FileOutputStream("E:/test/1-test-03.jpg");
thumbnail(img, 1220, 400, fos);// 非等比例压缩
// cut_w_h(img, 1220, 400, fos);
thumbnail_w_h(img, 1220, 400, fos);// 等比例压缩
}
/**
* 按照图片原来的宽高比例压缩
* @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_DEFAULT);
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = tag.createGraphics();
g2.setBackground(Color.WHITE);// 将背景设为白色
g2.setPaint(Color.BLACK);// 前景色设为黑色
g2.clearRect(0, 0, width, height);
g2.drawImage(image, 0, 0, null); // 绘制处理后的图
ImageIO.write(tag, "JPEG", out);
g2.dispose();
}
/**
* 按照宽高裁剪
* @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);
}
/**
* 裁剪
* @param srcImageFile
* @param x
* @param y
* @param destWidth
* @param destHeight
* @param 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_h
/**
* 裁剪PNG图片工具类
*
* @param fromFile 源文件
* @param toFile 裁剪后的文件
* @param outputWidth 裁剪宽度
* @param outputHeight 裁剪高度
* @param proportion 是否是等比缩放
*/
public static void resizePng(File fromFile, File toFile, int outputWidth, int outputHeight,
boolean proportion) {
try {
BufferedImage bi2 = ImageIO.read(fromFile);
int newWidth;
int newHeight;
// 判断是否是等比缩放
if (proportion) {
// 为等比缩放计算输出的图片宽度及高度
double rate1 = ((double) bi2.getWidth(null)) / (double) outputWidth + 0.1;
double rate2 = ((double) bi2.getHeight(null)) / (double) outputHeight + 0.1;
// 根据缩放比率大的进行缩放控制
double rate = rate1 < rate2 ? rate1 : rate2;
newWidth = (int) (((double) bi2.getWidth(null)) / rate);
newHeight = (int) (((double) bi2.getHeight(null)) / rate);
} else {
newWidth = outputWidth; // 输出的图片宽度
newHeight = outputHeight; // 输出的图片高度
}
BufferedImage to = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = to.createGraphics();
to = g2d.getDeviceConfiguration().createCompatibleImage(newWidth, newHeight,
Transparency.TRANSLUCENT);
g2d.dispose();
g2d = to.createGraphics();
@SuppressWarnings("static-access")
Image from = bi2.getScaledInstance(newWidth, newHeight, bi2.SCALE_AREA_AVERAGING);
g2d.drawImage(from, 0, 0, null);
g2d.dispose();
ImageIO.write(to, "png", toFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}