com.ksyzt.gwt.server.common.Thumbnail Maven / Gradle / Ivy
package com.ksyzt.gwt.server.common;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* thumbnail
*
* @author 54powerman
* @version 1.0
*/
public class Thumbnail {
/**
* The src file.
*/
private String srcFile;
/**
* The dest file.
*/
private String destFile;
/**
* The width.
*/
private int width;
/**
* The height.
*/
private int height;
/**
* The img.
*/
private Image img;
/**
* The main method.
*
* @param args the arguments
* @throws Exception the exception
*/
public static void main(String[] args) throws Exception {
}
/**
* 构造函数.
*
* @param fileName String
* @param dest the dest
* @throws IOException Signals that an I/O exception has occurred.
*/
public Thumbnail(String fileName, String dest) throws IOException {
File _file = new File(fileName); // 读入文件
this.srcFile = _file.getName();
this.destFile = dest;
img = javax.imageio.ImageIO.read(_file); // 构造Image对象
width = img.getWidth(null); // 得到源图宽
height = img.getHeight(null); // 得到源图长
}
/**
* 强制压缩/放大图片到固定的大小.
*
* @param w int 新宽度
* @param h int 新高度
* @throws IOException Signals that an I/O exception has occurred.
*/
public void resize(int w, int h) throws IOException {
BufferedImage _image = new BufferedImage(w, h,
BufferedImage.TYPE_INT_RGB);
_image.getGraphics().drawImage(
img.getScaledInstance(w, h, Image.SCALE_SMOOTH), 0, 0, w, h,
null); // 绘制缩小后的图
// FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// encoder.encode(_image); // 近JPEG编码
saveImage(_image, destFile);
// out.close();
}
/**
* Save image.
*
* @param dstImage the dst image
* @param dstName the dst name
* @throws IOException Signals that an I/O exception has occurred.
*/
static void saveImage(BufferedImage dstImage, String dstName)
throws IOException {
String formatName = dstName.substring(dstName.lastIndexOf(".") + 1);
// FileOutputStream out = new FileOutputStream(dstName);
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// encoder.encode(dstImage);
ImageIO.write(dstImage, /* "GIF" */formatName /* format desired */,
new File(dstName) /* target */);
}
/**
* 按照固定的比例缩放图片.
*
* @param t double 比例
* @throws IOException Signals that an I/O exception has occurred.
*/
public void resize(double t) throws IOException {
int w = (int) (width * t);
int h = (int) (height * t);
resize(w, h);
}
/**
* 以宽度为基准,等比例放缩图片.
*
* @param w int 新宽度
* @throws IOException Signals that an I/O exception has occurred.
*/
public void resizeByWidth(int w) throws IOException {
int h = (int) (height * w / width);
resize(w, h);
}
/**
* 以高度为基准,等比例缩放图片.
*
* @param h int 新高度
* @throws IOException Signals that an I/O exception has occurred.
*/
public void resizeByHeight(int h) throws IOException {
int w = (int) (width * h / height);
resize(w, h);
}
/**
* 按照最大高度限制,生成最大的等比例缩略图.
*
* @param w int 最大宽度
* @param h int 最大高度
* @throws IOException Signals that an I/O exception has occurred.
*/
public void resizeFix(int w, int h) throws IOException {
if (width / height > w / h) {
resizeByWidth(w);
} else {
resizeByHeight(h);
}
}
/**
* 设置目标文件名 setDestFile.
*
* @param fileName String 文件名字符串
* @throws Exception the exception
*/
public void setDestFile(String fileName) throws Exception {
if (!fileName.endsWith(".jpg")) {
throw new Exception("Dest File Must end with \".jpg\".");
}
destFile = fileName;
}
/**
* 获取目标文件名 getDestFile.
*
* @return the dest file
*/
public String getDestFile() {
return destFile;
}
/**
* 获取图片原始宽度 getSrcWidth.
*
* @return the src width
*/
public int getSrcWidth() {
return width;
}
/**
* 获取图片原始高度 getSrcHeight.
*
* @return the src height
*/
public int getSrcHeight() {
return height;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy