我有2个div
<div id="image-orig">
<img src="image_example.jpg"/>
</div>
<div id="image-crop">
<canvas id="preview" style="width:548px;height:387px"></canvas>
</div>
image_example.jpg可以是任意大小的图像。
function updatePreview(c) {
if(parseInt(c.w) > 0) {
var orig = $("#image-orig img")[0];
var canvas = $("#image-crop canvas")[0];
var context = canvas.getContext("2d");
context.drawImage(orig,
c.x*coeff,c.y*coeff,c.w*coeff,c.h*coeff,
0,0,canvas.width,canvas.height
);
}
}
$(function(){
$('#image-orig img').Jcrop({
onSelect: updatePreview,
onChange: updatePreview,
aspectRatio : parseFloat($('#image-orig img').width()/$('#image-orig img').height())
});
});
coeff - 如果尺寸图像更大的div预览,则为系数。
那是问题所在: http://dbwap.ru/3725988.png
在第二个div(画布)中。质量图像非常低。
解决方案
canvas.width = c.w*coeff;
canvas.height = c.h*coeff;
context.drawImage(orig,
c.x*coeff,c.y*coeff,c.w*coeff,c.h*coeff,
0,0,c.w*coeff,c.h*coeff
);
$(that.el).find("#ImageCode").attr('src', canvas.toDataURL());
$(that.el).find("#ImageCode").show();
我只是创建图像标记并从画布复制到图像。
答案 0 :(得分:1)
如果您有权访问.net,则可以使用JCrop修改新图像的保存方式: http://mironabramson.com/blog/post/2009/04/Cropping-image-using-jQuery,-Jcrop-and-ASPNET.aspx
无需使用服务器端(.net / php)即可使用的解决方案:
首先,确保在使用JCrop时启用了html5画布图像平滑处理:
http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html
如果已设置或无效,那么我认为您可以通过每个浏览器调查图像选项的其他选项:
在Mozilla中启用平滑 - 请参阅此文章作为示例(查找'mozImageSmoothingEnabled'):https://developer.mozilla.org/en/Canvas_tutorial/Using_images#Controlling_image_scaling_behavior
在IE中应用过滤器:http://code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
注意:可能有某种Flash解决方案可行,但将任何Flash解决方案与JCrop和html5画布相结合可能会非常困难。