96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

java图片压缩工具类-java压缩png图片

原创:找图网 2023-05-03 15:41:34
  • java如何实现把一个大图片压缩到指定大小的图片且长宽比不变?

  • java要实现把一个大图片压缩到指定大小的图片且长宽比不变可以尝试以下操作:

    建立一个AffineTransform

    AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)

    转换矩阵,缩放比较简单(矩阵可以干很多事情,想做图像处理软件可以研究下)

    [ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ]

    [ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ]

    [ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]

    10倍比较难算(根号10啊,当然你想算也行),9倍好点(9的开方是3),m00为1/3,m01为0,m02为0,m10为0,m11为1/3,m12为0。

    再建一个AffineTransformOp,把上面的转换传进去

    AffineTransformOp(AffineTransform xform, int interpolationType)

    最后调用AffineTransformOp的BufferedImage filter(BufferedImage src, BufferedImage dst) ,src传原图片,返回值就是想要的Image,注意是返回值,不是dst,不明白可以看下Java API

  • 求助java压缩图片存储大小的方法

  • 可以使用Draw这个类,通过改变像素来改变存储大小,实例如下:

    public static boolean compressPic(String srcFilePath, String descFilePath) throws IOException {

            File file = null;

            BufferedImage src = null;

            FileOutputStream out = null;

            ImageWriter imgWrier;

            ImageWriteParam imgWriteParams;

            // 指定写图片的方式为 jpg

            imgWrier = ("jpg").next();

            imgWriteParams = new (

                    null);

            // 要使用压缩,必须指定压缩方式为MODE_EXPLICIT

            (_EXPLICIT);

            // 这里指定压缩的程度,参数qality是取值0~1范围内,

            ((float) 1);

            (_DISABLED);

            ColorModel colorModel =(new File(srcFilePath)).getColorModel();// ();

            // 指定压缩时使用的色彩模式

    //        (new (

    //                colorModel, (16, 16)));

            (new (

                    colorModel, (16, 16)));

            try {

                if (isBlank(srcFilePath)) {

                    return false;

                } else {

                    file = new File(srcFilePath);(());

                    src = (file);

                    out = new FileOutputStream(descFilePath);

                    ();

                    // 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何

                    // OutputStream构造

                    ((out));

                    // 调用write方法,就可以向输入流写图片

                    (null, new IIOImage(src, null, null),

                            imgWriteParams);

                    ();

                    ();

                }

            } catch (Exception e) {

                e.printStackTrace();

                return false;

            }

            return true;

        }

    public static boolean isBlank(String string) {

            if (string == null || () == 0 || ().equals("")) {

                return true;

            }

            return false;

        }

  • java压缩png图片

  • 您转换的是图片的后缀名吧?您这样的方式已经把图片的信息删除了!

    您去下载一个java图片压缩器吧

    或者直接在Java下编辑代码来实习转换

    package ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    /**

    * 图片工具类

    * 压缩图片大小

    * @author Cyw

    * @version 1.0

    */

    public class ZIPImage {

    private File file = null;

    private String outPutFilePath;

    private String inPutFilePath;

    private String inPutFileName;

    private boolean autoBuildFileName;

    private String outPutFileName;

    private int outPutFileWidth = 100; // 默认输出图片宽

    private int outPutFileHeight = 100; // 默认输出图片高

    private static boolean isScaleZoom = true; // 是否按比例缩放

    public ZIPImage() {

    outPutFilePath = "";

    inPutFilePath = "";

    inPutFileName = "";

    autoBuildFileName = true;

    outPutFileName = "";

    }

    /**

    *

    * @param ipfp

    * 源文件夹路径

    * @param ipfn

    * 源文件名

    * @param opfp

    * 目标文件路径

    * @param opfn

    * 目标文件名

    */

    public ZIPImage(String ipfp, String ipfn, String opfp, String opfn) {

    outPutFilePath = opfp;

    inPutFilePath = ipfp;

    inPutFileName = ipfn;

    autoBuildFileName = true;

    outPutFileName = opfn;

    }

    /**

    *

    * @param ipfp

    * 源文件夹路径

    * @param ipfn

    * 源文件名

    * @param opfp

    * 目标文件路径

    * @param opfn

    * 目标文件名

    * @param aBFN

    * 是否自动生成目标文件名

    */

    public ZIPImage(String ipfp, String ipfn, String opfp, String opfn,

    boolean aBFN) {

    outPutFilePath = opfp;

    inPutFilePath = ipfp;

    inPutFileName = ipfn;

    autoBuildFileName = aBFN;

    outPutFileName = opfn;

    }

    public boolean isAutoBuildFileName() {

    return autoBuildFileName;

    }

    public void setAutoBuildFileName(boolean autoBuildFileName) {

    = autoBuildFileName;

    }

    public String getInPutFilePath() {

    return inPutFilePath;

    }

    public void setInPutFilePath(String inPutFilePath) {

    = inPutFilePath;

    }

    public String getOutPutFileName() {

    return outPutFileName;

    }

    public void setOutPutFileName(String outPutFileName) {

    = outPutFileName;

    }

    public String getOutPutFilePath() {

    return outPutFilePath;

    }

    public void setOutPutFilePath(String outPutFilePath) {

    = outPutFilePath;

    }

    public int getOutPutFileHeight() {

    return outPutFileHeight;

    }

    public void setOutPutFileHeight(int outPutFileHeight) {

    = outPutFileHeight;

    }

    public int getOutPutFileWidth() {

    return outPutFileWidth;

    }

    public void setOutPutFileWidth(int outPutFileWidth) {

    = outPutFileWidth;

    }

    public boolean isScaleZoom() {

    return isScaleZoom;

    }

    public void setScaleZoom(boolean isScaleZoom) {

    = isScaleZoom;

    }

    public String getInPutFileName() {

    return inPutFileName;

    }

    public void setInPutFileName(String inPutFileName) {

    = inPutFileName;

    }

    /**

    * 压缩图片大小

    *

    * @return boolean

    */

    public boolean compressImage() {

    boolean flag = false;

    try {

    if (().equals("")) {

    throw new NullPointerException("源文件夹路径不存在。");

    }

    if (().equals("")) {

    throw new NullPointerException("图片文件路径不存在。");

    }

    if (().equals("")) {

    throw new NullPointerException("目标文件夹路径地址为空。");

    } else {

    if (!(outPutFilePath)) {

    throw new FileNotFoundException(outPutFilePath

    + " 文件夹创建失败!");

    }

    }

    if () { // 自动生成文件名

    String tempFile[] = getFileNameAndExtName(inPutFileName);

    outPutFileName = tempFile[0] + "_cyw." + tempFile[1];

    compressPic();

    } else {

    if (().equals("")) {

    throw new NullPointerException("目标文件名为空。");

    }

    compressPic();

    }

    } catch (Exception e) {

    flag = false;

    e.printStackTrace();

    return flag;

    }

    return flag;

    }

    // 图片处理

    private void compressPic() throws Exception {

    try {

    // 获得源文件

    file = new File(inPutFilePath + inPutFileName);

    if (!()) {

    throw new FileNotFoundException(inPutFilePath + inPutFileName

    + " 文件不存在!");

    }

    Image img = (file);

    // 判断图片格式是否正确

    if ((null) == -1) {

    throw new Exception("文件不可读!");

    } else {

    int newWidth;

    int newHeight;

    // 判断是否是等比缩放

    if ( == true) {

    // 为等比缩放计算输出的图片宽度及高度

    double rate1 = ((double) (null))

    / (double) outPutFileWidth + 0.1;

    double rate2 = ((double) (null))

    / (double) outPutFileHeight + 0.1;

    // 根据缩放比率大的进行缩放控制

    double rate = rate1 > rate2 ? rate1 : rate2;

    newWidth = (int) (((double) (null)) / rate);

    newHeight = (int) (((double) (null)) / rate);

    } else {

    newWidth = outPutFileWidth; // 输出的图片宽度

    newHeight = outPutFileHeight; // 输出的图片高度

    }

    BufferedImage tag = new BufferedImage((int) newWidth,

    (int) newHeight, _INT_RGB);

    /*

    * _SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢

    */

    ().drawImage(

    (newWidth, newHeight,

    _SMOOTH), 0, 0, null);

    FileOutputStream out = new FileOutputStream(outPutFilePath

    + outPutFileName);

    JPEGImageEncoder encoder = (out);

    (tag);

    ();

    }

    } catch (IOException ex) {

    ();

    }

    }

    /**

    * 创建文件夹目录

    *

    * @param filePath

    * @return

    * @throws Exception

    */

    @SuppressWarnings("unused")

    private static boolean mddir(String filePath) throws Exception {

    boolean flag = false;

    File f = new File(filePath);

    if (!f.exists()) {

    flag = f.mkdirs();

    } else {

    flag = true;

    }

    return flag;

    }

    /**

    * 获得文件名和扩展名

    *

    * @param fullFileName

    * @return

    * @throws Exception

    */

    private String[] getFileNameAndExtName(String fullFileName)

    throws Exception {

    String[] fileNames = new String[2];

    if ((".") == -1) {

    throw new Exception("源文件名不正确!");

    } else {

    fileNames[0] = (0, fullFileName

    .lastIndexOf("."));

    fileNames[1] = fullFileName

    .substring((".") + 1);

    }

    return fileNames;

    }

    public Image getSourceImage() throws IOException{

    //获得源文件

    file = new File(inPutFilePath + inPutFileName);

    if (!()) {

    throw new FileNotFoundException(inPutFilePath + inPutFileName

    + " 文件不存在!");

    }

    Image img = (file);

    return img;

    }

    /*

    * 获得图片大小

    * @path :图片路径

    */

    public long getPicSize(String path) {

    File file = new File(path);

    return ();

    }

    }

    //下面是测试程序

    package ;

    import ;

    import ;

    public class ImageTest {

    public static void main(String[] args) throws IOException {

    ZIPImage zip=new ZIPImage("d:\\","1.jpg","d:\\test\\","处理后的图片.jpg",false);

    (1000);

    (1000);

    Image image=();

    long size=("d:\\1.jpg");

    ("处理前的图片大小 width:"+(null));

    ("处理前的图片大小 height:"+(null));

    ("处理前的图片容量:"+ size +" bit");

    ();

    }

    }

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com