【问题标题】:How to minimize requested image using jquery cropit plugin?如何使用 jquery cropit 插件最小化请求的图像?
【发布时间】:2015-05-08 19:11:38
【问题描述】:

我的代码正在裁剪图像,但裁剪后的图像非常大。我正在使用Cropit jQuery plugin

我的视图在图像上有一个 div 掩码。当表单发布时,隐藏的输入已通过以下脚本裁剪图像。

<div class="image-editor" style="margin-left:120px; margin-bottom:25px; margin-top:25px;">
    <input id="fileinput" type="file" name="filex" class="cropit-image-input">
    <div class="cropit-image-preview" style="background-image:url()"></div>
    <input type="range" class="cropit-image-zoom-input">
    <input type="hidden" name="image-data" value="" class="hidden-image-data" />
    <button type="submit" class="export">Crop</button>
</div>

<script>
    $(function () {
        $('.image-editor').cropit({});
        $('.export').click(function () {
            var imageData = $('.image-editor').cropit('export');
            $('.hidden-image-data').val(imageData);
        });
     });
</script>

在我的控制器中,创建函数通过请求获取裁剪图像并写入文件,但新文件太大。例如,输入文件为 50kb,裁剪后的输出文件为 600kb。通常裁剪后的图像必须小于输入图像。如何解决问题?

[HttpPost]
public ActionResult Create()
{
    var dataurl = Request["image-data"];
    var data = dataurl.Substring(dataurl.IndexOf(",") + 1);
    var newfile = Convert.FromBase64String(data);

    var layoutfilename = Guid.NewGuid().ToString() + "_imgage.jpg";
    var dataFile = Server.MapPath(@"~/Img/" + layoutfilename);
    System.IO.File.WriteAllBytes(dataFile, newfile);
}

【问题讨论】:

    标签: javascript c# jquery asp.net image


    【解决方案1】:

    查看 Cropit 的源代码,这是与输出数据大小相关的代码:

    Cropit.prototype.getCroppedImageData = function(exportOptions) {
    var canvas, canvasContext, croppedSize, exportDefaults, exportZoom;
    if (!this.imageSrc) {
         return null;
    }
         exportDefaults = {
         type: "image/png",
         quality: .75,
         originalSize: false,
         fillBg: "#fff"
    };
    exportOptions = $.extend({}, exportDefaults, exportOptions);
    

    这是最终由cropit('export') 调用的函数的开头。

    这里发生的情况是您的输入数据的压缩产生的输入小于质量(7、8,此处不确定)PNG 图像输出的输入。

    您可以在 cropit() 调用中指定选项 - 来自插件的文档:

    $imageCropper.cropit('export', {
      type: 'image/jpeg',
      quality: .9,
      originalSize: true
    });
    

    【讨论】:

    • 已编辑类型为 jpg,质量为 0.5 和 originalsize: true 但不起作用,请注意小 10 kb。
    • 输出数据大小完全取决于您传递给cropit 的选项。我个人从未使用过cropit,所以我无法为您提供准确的解决方案,但这应该会让您朝着正确的方向前进。
    • 你知道任何cropper facebook风格吗?
    • 输出图像被重新采样,因此它可以大于原始图像(例如,如果输入图像被高度压缩)。 @jdphenix 提供了正确的轨道,使用 jpeg 类型和一个小的 quality 值应该可以做到这一点。将originalSize 设置为 false(默认设置)也有助于减小输出文件的大小。
    • 没有工作。每次输出更大的图像。有没有不重采样的方法?同时,当输入文件为1mb及更大的图片时,出现“System.Web.HttpException:reached the maximum request length”的错误。
    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    相关资源
    最近更新 更多