/**
* 压缩图片,通过压缩图片质量,保持原图大小
*
* @param imageByte
* @param quality
* @return
* @throws Exception
*/
public static boolean compressPic(String beginPath, float quality, String finaPath) throws Exception {
boolean bool = false;
try {
byte[] imageByte = DSHFileOperate.imageToByte(beginPath);
ByteArrayInputStream byteInput = new ByteArrayInputStream(imageByte);
Image img = ImageIO.read(byteInput);
float newWidth = img.getWidth(null);
float newHeight = img.getHeight(null);
Image image = img.getScaledInstance((int) newWidth, (int) newHeight, Image.SCALE_SMOOTH);
// 缩放图像
BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = tag.createGraphics();
g.drawImage(image, 0, 0, null); // 绘制缩小后的图
g.dispose();
ByteArrayOutputStream out = new ByteArrayOutputStream(imageByte.length);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/* 压缩质量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep);
byte[] inByte = out.toByteArray();
byteToImage(inByte, finaPath);
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return bool;
}
/**
* 从图片地址转换为byte
*
* @param path
* @return
*/
public static byte[] imageToByte(String path) throws Exception {
byte[] data = null;
FileImageInputStream input = null;
try {
input = new FileImageInputStream(new File(path));
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int numBytesRead = 0;
while ((numBytesRead = input.read(buf)) != -1) {
output.write(buf, 0, numBytesRead);
}
data = output.toByteArray();
output.close();
input.close();
} catch (FileNotFoundException ex1) {
ex1.printStackTrace();
} catch (IOException ex1) {
ex1.printStackTrace();
}
return data;
}
/**
* 从byte数组到图片
*
* @param path
* @return
*/
public static void byteToImage(byte[] data, String path) throws Exception {
if (data.length < 3 || path.equals(""))
return;
try {
FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path));
imageOutput.write(data, 0, data.length);
imageOutput.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}