2011-04-09 160 views
25

有谁知道任何免费的脚本,尽可能压缩JPG,GIF和PNG文件?上传前压缩客户端图像

+4

所有这三个都是压缩格式。进一步压缩现有的图像会导致质量损失。 – Charles 2011-04-09 19:45:06

+0

你对这个“smushit.com”有什么评价? – xtremist 2011-04-09 20:07:20

+0

@Charles不一定,大多数人都懒惰地压缩他们的图像。所以无损压缩可能会大大减少大多数图像的大小。 – 2017-05-02 11:34:51

回答

4

我在这里读到一个实验:http://webreflection.blogspot.com/2010/12/100-client-side-image-resizing.html

的理论是,你可以用帆布上传之前调整客户端上的图像。原型示例似乎只适用于最近的浏览器,虽然有趣的想法...

但是,我不确定使用画布压缩图像,但您可以调整它们的大小。

+0

由我需要类似smushit.com – xtremist 2011-04-09 20:13:03

+0

我不认为你可以在客户端复制Smushit。 – David 2011-04-09 20:22:43

+0

$ mush-it => $ mu- $ hit。哈哈,我让自己伤心使用jQuery ..... – 2017-05-02 11:37:45

51

我只是开发了一个名为JIC来解决这个问题一个JavaScript库。它允许你在客户端压缩jpg和png 100%,并且不需要外部库!

你可以在这里尝试演示:http://makeitsolutions.com/labs/jic 这里获得来源:https://github.com/brunobar79/J-I-C

希望你喜欢它。

+1

没办法解压缩回来? – RWendi 2013-08-27 06:34:01

+17

您应该能够通过简单地调整图像的大小来解压缩它。你可能需要下载更多的ram才能做到这一点。 – Dan 2014-03-09 22:53:25

+0

@ brunobar79可以将图像导出为JavaScript Blob,以便我们可以在不使用PHP的情况下上传图像? – 2015-11-19 23:10:46

4

我迟到了,但这个解决方案对我来说工作得非常好。基于this library,您可以使用此LIK一个功能 - 设置图像质量,最大宽度,和输出格式(JEPG,PNG):

function compress(source_img_obj, quality, maxWidth, output_format){ 
    var mime_type = "image/jpeg"; 
    if(typeof output_format !== "undefined" && output_format=="png"){ 
     mime_type = "image/png"; 
    } 

    maxWidth = maxWidth || 1000; 
    var natW = source_img_obj.naturalWidth; 
    var natH = source_img_obj.naturalHeight; 
    var ratio = natH/natW; 
    if (natW > maxWidth) { 
     natW = maxWidth; 
     natH = ratio * maxWidth; 
    } 

    var cvs = document.createElement('canvas'); 
    cvs.width = natW; 
    cvs.height = natH; 

    var ctx = cvs.getContext("2d").drawImage(source_img_obj, 0, 0, natW, natH); 
    var newImageData = cvs.toDataURL(mime_type, quality/100); 
    var result_image_obj = new Image(); 
    result_image_obj.src = newImageData; 
    return result_image_obj; 
} 
3

如果你正在寻找一个库,进行客户端 - 侧面图像压缩,你可以检查一下:compress.js。这基本上可以帮助您纯粹用JavaScript压缩多个图像并将它们转换为base64字符串。您可以选择以MB为单位设置最大尺寸以及首选的图像质量。