- import java.awt.Image;
- import java.awt.image.BufferedImage;
- import java.awt.image.RenderedImage;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
- public class ImgManager1 {
- public static void main(String args[]) {
- ImgManager1.reduceImgGif("c:/testgif.gif", "c:/xufnew/test02.gif", 150, 200);
- }
- /**
- * 图像缩放 jpg格式
- *
- * @param imgsrc
- * :原图片文件路径
- * @param imgdist
- * :生成的缩略图片文件路径
- * @param widthdist
- * :生成图片的宽度
- * @param heightdist
- * :生成图片的高度
- */
- public static void reduceImg(String imgsrc, String imgdist, int widthdist,
- int heightdist) {
- try {
- File srcfile = new File(imgsrc);
- if (!srcfile.exists()) {
- return;
- }
- Image src = ImageIO.read(srcfile);
- BufferedImage tag = new BufferedImage((int) widthdist,
- (int) heightdist, BufferedImage.TYPE_INT_RGB);
- /*
- * Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的
- * 优先级比速度高 生成的图片质量比较好 但速度慢
- */
- tag.getGraphics().drawImage(
- src.getScaledInstance(widthdist, heightdist,
- Image.SCALE_SMOOTH), 0, 0, null);
- FileOutputStream out = new FileOutputStream(imgdist);
- JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- encoder.encode(tag);
- out.close();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- public static void reduceImgGif(String imgsrc, String imgdist, int widthdist,
- int heightdist) {
- try {
- File srcfile = new File(imgsrc);
- if (!srcfile.exists()) {
- return;
- }
- Image src = ImageIO.read(srcfile);
- BufferedImage tag = new BufferedImage((int) widthdist,
- (int) heightdist, BufferedImage.TYPE_INT_RGB);
- /*
- * Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的
- * 优先级比速度高 生成的图片质量比较好 但速度慢
- */
- tag.getGraphics().drawImage(
- src.getScaledInstance(widthdist, heightdist,
- Image.SCALE_SMOOTH), 0, 0, null);
- // FileOutputStream out = new FileOutputStream(imgdist);
- // JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
- // encoder.encode(tag);
- // out.close();
- ImageIO.write(tag, "gif", new File(imgdist));
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- /**
- * 根据图片路径 读取图片文件
- * @param fileName
- * @return
- */
- public static BufferedImage readImage(String fileName) {
- BufferedImage bi = null;
- try {
- bi = ImageIO.read(new File(fileName));
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- return bi;
- }
- /**
- * 生成新的图片文件
- * @param im
- * @param formatName
- * @param fileName
- * @return
- */
- public static boolean writeImage(RenderedImage im, String formatName,
- String fileName) {
- boolean result = false;
- try {
- result = ImageIO.write(im, formatName, new File(fileName));
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- return result;
- }
- /**
- * 转换图片格式 到 jpg
- * @param im
- * @param fileName
- * @return
- */
- public static boolean writeJPEGImage(RenderedImage im, String fileName) {
- return writeImage(im, "JPEG", fileName);
- }
- /**
- * 转换图片格式 到 gif 不知到好用不
- * @param im
- * @param fileName
- * @return
- */
- public static boolean writeGIFImage(RenderedImage im, String fileName) {
- return writeImage(im, "GIF", fileName);
- }
- public static boolean writePNGImage(RenderedImage im, String fileName) {
- return writeImage(im, "PNG", fileName);
- }
- public static boolean writeBMPImage(RenderedImage im, String fileName) {
- return writeImage(im, "BMP", fileName);
- }
- }
我把一张1200 * 1600的jpg的图片 缩放到 150 * 200 文件大小由700多k 降到7k多点 清晰度还可以, 因为要把网站放到手机上, 所以要作, 按流量收费的. 呵呵
由于gif编码是专利产品 所以java对他的支持不好, 有JPEGCodec 解码编码没有gif的
有人说sun的 jimi 和 jai 可以 但我没有发现可以使用的方法