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

图片压缩传输 解压 java-你好,最近我也遇到用java压缩和解压,向你咨询下你的解决方案什么,你是怎么用文件流方式去压缩?

原创:找图网 2023-05-03 16:13:09
  • 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压缩和解压,向你咨询下你的解决方案什么,你是怎么用文件流方式去压缩?

  • package ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    import ;

    /**

    * @author fz 2010-7-30

    * @Description 把指定文件夹下的所有文件压缩为指定文件夹下指定zip文件;把指定文件夹下的zip文件解压到指定目录下

    */

    public class ZipUtils {

    private static final Logger logger = ();

    private static final String SEPARATE = "/";

    /**

    * @Author fz 2010-7-30

    * @param sourceDir 待压缩目录

    * @param zipFile 压缩文件名称

    * @throws Exception

    * @Description 把sourceDir目录下的所有文件进行zip格式的压缩,保存为指定zip文件

    */

    public static void zip(String sourceDir, String zipFile) throws Exception {

    OutputStream os = null;

    // try {

    os = new FileOutputStream(zipFile);

    BufferedOutputStream bos = new BufferedOutputStream(os);

    ZipOutputStream zos = new ZipOutputStream(bos);

    File file = new File(sourceDir);

    String basePath = null;

    if (()) {

    basePath = ();

    } else {

    // 直接压缩单个文件时,取父目录

    basePath = ();

    }

    zipFile(file, basePath, zos);

    ();

    ();

    // } catch (Exception e) {

    // ("压缩文件或文件夹" + sourceDir + "时发生异常");

    // e.printStackTrace();

    // }

    }

    /**

    * @Author fz 2010-7-30

    * @param source 源文件

    * @param basePath 待压缩文件根目录

    * @param zos 文件压缩流

    * @Description 执行文件压缩成zip文件

    */

    private static void zipFile(File source, String basePath, ZipOutputStream zos) {

    File[] files = new File[0];

    if (()) {

    files = ();

    } else {

    files = new File[1];

    files[0] = source;

    }

    //存相对路径(相对于待压缩的根目录)

    String pathName = null;

    byte[] buf = new byte[1024];

    int length = 0;

    try {

    for (File file : files) {

    if (()) {

    pathName = ().substring(() + 1) + SEPARATE;

    (new ZipEntry(pathName));

    zipFile(file, basePath, zos);

    } else {

    pathName = ().substring(() + 1);

    InputStream is = new FileInputStream(file);

    BufferedInputStream bis = new BufferedInputStream(is);

    (new ZipEntry(pathName));

    while ((length = (buf)) > 0) {

    (buf, 0, length);

    }

    ();

    }

    }

    } catch (Exception e) {

    ("压缩文件" + source + "时发生异常");

    e.printStackTrace();

    }

    }

    /**

    * @Author fz 2010-7-30

    * @param zipfile 待解压文件

    * @param destDir 解压文件存储目录

    * @throws Exception

    * @Description 解压zip文件,只能解压zip文件

    */

    @SuppressWarnings("unchecked")

    public static void unZip(String zipfile, String destDir) throws Exception {

    destDir = (SEPARATE) ? destDir : destDir + SEPARATE;

    byte b[] = new byte[1024];

    int length;

    ZipFile zipFile;

    // try {

    zipFile = new ZipFile(new File(zipfile));

    Enumeration enumeration = ();

    ZipEntry zipEntry = null;

    while (()) {

    zipEntry = (ZipEntry) ();

    File loadFile = new File(destDir + ());

    if (()) {

    ();

    } else {

    if (!().exists()) {

    ().mkdirs();

    }

    OutputStream outputStream = new FileOutputStream(loadFile);

    InputStream inputStream = (zipEntry);

    while ((length = (b)) > 0)

    (b, 0, length);

    ();

    ();

    }

    }

    ();

    // } catch (IOException e) {

    // ("解压文件" + zipfile + "时发生异常");

    // e.printStackTrace();

    // }

    }

    }

  • 求一个Java无损压缩图片的示例,把原图片复制到指定目录,按原图比例改变尺寸,不影响图片质量。

  • 一般都是大尺寸变小尺寸,肯定有损的。

    不知道你的无损是什么意思,意思是变小尺寸了还能变大也像以前一样清晰?

    好像有种“矢量图片”就是可以随意放大缩小并且无损,缺点就是图片很占空间。

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