xufei0110 发表于 2013-1-27 05:20:35

java缩放图片

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 可以 但我没有发现可以使用的方法
页: [1]
查看完整版本: java缩放图片