使用cropit的多个预览图像不同的高度和宽度

Posted

技术标签:

【中文标题】使用cropit的多个预览图像不同的高度和宽度【英文标题】:Multiple Preview images diffrent height and width using cropit 【发布时间】:2015-12-21 03:52:08 【问题描述】:

裁剪和调整图像大小是构建 cms 的常见问题,所以我发现了很棒的插件 here 该插件在桌面和移动触摸屏上运行良好,但我的项目中有最后一个问题如何在此页面中进行多个预览!

已经看过那里的问题,发现有人发布了和我一样的问题,所以我在这里挖掘但没有工作,问题here

然后我检查了 jquery.cropit.js 第 927 行有类cropit-image-preview 意味着将加载图像,所以我做

  <form action="#">
  <div class="image-editor">
    <input type="file" class="cropit-image-input">
    <div class="cropit-image-preview"></div>
    <div class="image-size-label">
      Resize image
    </div>
    <input type="range" class="cropit-image-zoom-input">
    <input type="hidden" name="image-data" class="hidden-image-data" />
    <button type="submit">Submit</button>
  </div>

  <!--diffrent class with cropit-image-preview with diffrent height and width-->
   <div class="image-editor-test">
    <input type="file" class="cropit-image-input">
    <div class="cropit-image-preview-test"></div>
    <div class="image-size-label">
      Resize image
    </div>
    <input type="range" class="cropit-image-zoom-input">
    <input type="hidden" name="image-data" class="hidden-image-data" />
    <button type="submit">Submit</button>
  </div>
 </form> 

然后我复制 jquery.cropit.js 并将其重命名并将第 927 行更改为 cropit-image-preview-test 并且 css 也在这里

.cropit-image-preview 
    background-color: #f8f8f8;
    background-size: cover;
    border: 1px solid #ccc;
    border-radius: 3px;
    margin-top: 7px;
    width: 250px;
    height: 250px;
    cursor: move;
  

   .cropit-image-preview-test 
    background-color: #f8f8f8;
    background-size: cover;
    border: 1px solid #ccc;
    border-radius: 3px;
    margin-top: 7px;
    width: 300px;
    height: 300px;
    cursor: move;
  

这是我的 js

$(function() 
    $('.image-editor').cropit();

    $('form').submit(function() 
       var imageData = $('.image-editor').cropit('export');
       $('.hidden-image-data').val(imageData);
       var formValue = $(this).serialize();
       $('#result-data').text(formValue);
      return false;
    );

    <!--test preview image-->
    $('.image-editor-test').cropit();

    $('form#test').submit(function() 
       var imageData = $('.image-editor-test').cropit('export');
       $('.hidden-image-data-test').val(imageData);
       var formValue = $(this).serialize();
       $('#result-data-test').text(formValue);
      return false;
    );

  );

老实说,这来自演示 here 和 issue,但作者没有回应,有人已经在 *** 中发帖,但没有明确的解释,感谢您的任何评论

【问题讨论】:

【参考方案1】:

我想我首先要提到的是,默认情况下,cropit 插件开箱即用,具有两种不同大小的预览。您只需向“cropit-preview”添加一个类即可对其进行样式设置。 Here is a JSfiddle example。我在上面的代码中看到的主要问题是您将第二个预览类的预览类从“cropit-image-preview”更改为“cropit-image-preview-test”。这不应该改变。

另外,在最新版本的cropit 插件(我相信是0.5)中,这个预览类和它周围的帮助类已经改变了。我知道您是从其他来源复制的,但在尝试解决此问题之前,我会确保您使用的是最新版本。你可以在他们的 Github 上查看文档://github.com/scottcheng/cropit

我的例子:

如果您想摆脱丑陋的文件上传按钮,请按照以下示例进行操作。 Here is the JSFiddle 获取完整的工作示例和参考。我还在 javascript 部分中包含了cropit 插件,因为它不在 CDN 上,因此您需要一直向下滚动才能看到页面的嵌入代码(我在页面示例中删除了它们)。

注意: 我没有展示如何处理图像以便上传并将其传递到服务器,因为这不是问题的一部分。在我的申请中,我在表单提交期间处理了这个过程。

JAVASCRIPT

我将每个cropit分配给一个变量,以便我们稍后在脚本中使用它(在本例中,它用于超时函数)。

var memberCropper = $('#image-cropper');

var ballotCropper = $('#ballot-image-cropper');

然后使用包含的一些选项初始化cropit 方法(根据您的应用程序,您的选项可能会有所不同)。

memberCropper.cropit(
  imageBackground: true,
  imageBackgroundBorderWidth: 10
);

ballotCropper.cropit(
  imageBackground: true,
  imageBackgroundBorderWidth: 10
);

然后我为我为每个cropit创建的按钮添加了一个onclick函数。这允许您隐藏丑陋的默认文件选择选项。

$('.select-image-btn').click(function() 
    memberCropper.find('.cropit-image-input').click();
);

$('.ballot-select-image-btn').click(function() 
    ballotCropper.find('.cropit-image-input').click();
);

CSS

位于小提琴中的 CSS 是一个已编译的 LESS 文件,因此它看起来很多,但您需要为您创建的每个裁剪区分开样式,以便更改每个预览的尺寸。我会假设你会有自己的方式来完成你的造型。

HTML

这是两个部分的完整 html

<div id="ballot-image-cropper">
  <div class="ballot-select-image-btn btn btn-success">Update Ballot Image</div>

    <div class="cropit-preview ballot-cropit-preview"></div>

    <input type="range" class="cropit-image-zoom-input">

    <input type="file" class="cropit-image-input" name="ballotImage" id="ballotImage" />
</div>


<div id="image-cropper">
  <div class="select-image-btn btn btn-success">Add Member Image</div>
    <div class="cropit-preview"></div>

    <input type="range" class="cropit-image-zoom-input">

    <input type="file" class="cropit-image-input" name="memberImage" id="memberImage" />
  </div>

【讨论】:

以上是关于使用cropit的多个预览图像不同的高度和宽度的主要内容,如果未能解决你的问题,请参考以下文章

预览窗格中照片的纵横比,其中高度恒定且仅宽度变化

Android 相机预览在预览中拉伸,而不是在拍照后

从预览窗口中获取图像或画布

设置缩小的相机预览以相对于宽度具有正确的图像纵横比

使用 jcrop 裁剪带有预览的图像

重用 FileReader 时宽度和高度错误