在上传之前压缩客户端上的图像

xtr*_*ist 36 javascript jquery jquery-plugins

有没有人知道任何压缩JPG,GIF和PNG文件的免费脚本?

小智 55

我刚刚开发了一个名为JIC的javascript库来解决这个问题.它允许您使用javascript在客户端100%压缩jpg和png,无需外部库!

你可以在这里试试这个演示:http://makeitsolutions.com/labs/jic 并在这里获取资源:https://github.com/brunobar79/JIC

  • 您应该能够通过简单地将图像调整为更大来解压缩它.您可能需要下载更多ram才能执行此操作. (28认同)
  • 我试图使用JIC压缩的图像只是使尺寸更大.这有发生在其他人身上吗? (6认同)
  • 关于尺寸的增加 - jpeg 没有 alpha 通道('rgba' 的 'a' 部分),而 png 有它,因此 jpeg 中的每个像素需要 3 个信息 - rgb,而 png 中的每个像素需要 4 个信息 - rgb信息-rgba。当 jpeg 到 png 转换发生时,仅此一点就会使 png 变大。此外,由于 png 是无损的,而 jpeg 是有损的,因此 jpeg 压缩可以使其更小,但以牺牲 png 的质量为代价。JIC 正在将您的 jpeg 转换为 png,因此尺寸会增加! (2认同)
  • 是的。规模越来越大。如果它增加了大小,使用这个库有什么用:(@brunobar79 (2认同)

typ*_*eof 17

您可以canvas使用dataURI 调整图像大小并将其导出.但是不确定压缩.

看看这个:在HTML5画布中调整图像大小


小智 7

我迟到了,但这个解决方案对我很有用.基于此库,您可以使用一个函数 - 设置图像,质量,最大宽度和输出格式(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;
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ing 6

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

理论上说,您可以在上传之前使用canvas来调整客户端上的图像大小.原型示例似乎只适用于最近的浏览器,但有趣的想法...

但是,我不确定使用canvas来压缩图像,但你肯定可以调整它们的大小.


ale*_*pin 6

如果您正在寻找执行客户端图像压缩的库,则可以查看以下内容:compress.js。这基本上可以帮助您纯粹使用JavaScript压缩多个图像并将它们转换为base64字符串。您可以选择设置最大大小(以MB为单位)以及首选图像质量。