Javascript Jquery确定在画布中缩放图像的有效DPI
我使用cropit.js允许访问者上传用于打印的大型JPEG或TIFF图像。我以300DPI打印 cropit.js HTML 5画布的尺寸由访问者决定(在前面的脚本中使用一个numberfield,这些尺寸作为变量传递给cropit.js HTML 5画布。这一切都非常有效 有些图片一开始不适合,或者需要访问者调整大小。Cropit.js应该适合这样做 我的问题:我想显示上传图像的有效大小,它的大小与HTML 5画布(它是最终打印图像@300DPI的表示)相比。所需的数学/计算让我大吃一惊。有人能帮忙吗Javascript Jquery确定在画布中缩放图像的有效DPI,javascript,jquery,html,image,canvas,Javascript,Jquery,Html,Image,Canvas,我使用cropit.js允许访问者上传用于打印的大型JPEG或TIFF图像。我以300DPI打印 cropit.js HTML 5画布的尺寸由访问者决定(在前面的脚本中使用一个numberfield,这些尺寸作为变量传递给cropit.js HTML 5画布。这一切都非常有效 有些图片一开始不适合,或者需要访问者调整大小。Cropit.js应该适合这样做 我的问题:我想显示上传图像的有效大小,它的大小与HTML 5画布(它是最终打印图像@300DPI的表示)相比。所需的数学/计算让我大吃一惊。有
<script>
$(function() {
$('.image-editor').cropit({
imageState: {
src: 'imagedir/image1000x2000px.jpeg',
},
});
$('.preview-wrapper').cropit('previewSize', { width: ''+ var_numberfield_width+'', height: ''+var_numberfield-height+'' });
$('.export').click(function() {
var imageData = $('.image-editor').cropit('export');
window.open(imageData);
});
});
</script>
$(函数(){
$('.image editor').cropit({
图像状态:{
src:'imagedir/image1000x2000px.jpeg',
},
});
$('.preview wrapper').cropit('previewSize',{width:'+var\u numberfield\u width+'',height:'+var\u numberfield-height+'});
$('.export')。单击(函数(){
var imageData=$('.image editor').cropit('export');
窗口。打开(图像数据);
});
});
当我准备一个完整的答案时,我想我可能会收集一大堆我发现有趣的阅读链接。将来可能会有帮助:
- 向jquery中添加类似“photoshop”的标尺
var image = new Image();
image.src = /*dropped image URL*/
image.onload = function(){ // need to wait till it has loaded
width = image.width; // number of pixels across
height = image.height; // number of pixels down.
}
DPI仅与分辨率有松散的联系。您不能提高图像分辨率。这样做只会使图像模糊。图像的下降形式达到了它将达到的最大DPI。在以任何方式上载之前,请勿缩放图像。(除非图像太大)
您在画布中显示的图像不是您要加载的图像。在上面的代码段中,可以以任何分辨率绘制图像
假设您的画布为1024 x 1024,加载的图像为4096 x 2048。您需要在低分辨率画布上显示图像,方法是均匀缩放图像,然后按该比例渲染。将图像渲染到画布不会影响图像,它仍保留其原始分辨率
以获得正确的比例来显示整个图像
var scale = Math.min(image.width / canvas.width, image.height / canvas.height);
// to display the image on the canvas
ctx.drawImage(image,0,0,image.width * scale,image.height * scale);
在计算机上处理图像时,忘记DPI,它是没有意义的,因为你无法知道一个点(像素)有多大。DPI是打印机的一个功能
客户选择打印尺寸后,您可以给出有效的DPI(我更喜欢PPI(每英寸像素数)),即像素数除以打印尺寸(英寸)。例如,在7英寸×5英寸的打印上,合理的图像5184×3456像素将给出约740DPI的DPI,但如果您更改打印尺寸16×12DPI变为~432DPI。更改的只是打印大小,图像根本没有更改。?画布?您是指真实世界画布或HTML5元素画布?DPI对HTML5画布没有任何意义。您可以通过指定宽度和高度(英寸或厘米)来设置打印作业,DPI取决于打印质量,如果客户希望上传1×1像素的图像以10×10英寸打印,则显示打印作业为10“x 10”@300DPI。如果它是一幅真实的画布,你的意思是它必须有一个物理尺寸,你可以使用打印尺寸除以画布尺寸来缩放屏幕上显示的图像,这可能是什么尺寸。如果你得到模糊/模糊的图像,你应该看看这篇文章,如果你还没有。@Blindman67-对不起,我读了我的问题,看起来我没有asn最初不太清楚。重新编写,是的,我相信cropit.js使用HTML画布,我们不是在谈论真实世界的画布(我不打印,它们是令人讨厌的东西!)。感谢您的输入。@LarryTurtis有趣的东西,谢谢!这可能会帮助您计算与输出设备分辨率(即打印机)相等的图像大小:这是难以置信的深思熟虑。我需要在早上喝一杯浓咖啡来了解你的评论。一个网站,如计算“有效DPI”-当你上传图像时,如果文件的分辨率(用于打印),该网站(其他网站)会显示警告与用户输入的尺寸相比太低。只是一个查询!对您的输入非常感兴趣。@Callum一旦您有了打印尺寸,您就可以得到DPI,即image.width/打印宽度(以英寸为单位)。好的DPI取决于观看距离。例如,覆盖10层建筑大小的图像约为0.1DPI,但没有人接近它的fine.对于小字体5by7,低于300或150 DPI的任何内容都应该有警告。人类视觉可以分辨0.02°deg,因此在1米处,我们可以看到小到0.3mm(约25 DPI)的东西。完全可以听到您对PPI和DPI的混淆