我有一些复杂的问题有待解决。现在我需要在javascript中编写这样一个函数,它支持HTML5中的对象画布,它将剪切图片的一部分并在预览中显示它。我需要做的不是分辨率不同的图像。我使用的jQuery库为此,特别是jquery.Jcrop.js ..在预览中的图片的可见部分我gona使用后来出于进一步的目的,它必须是可剪切的形式写入文件 - 所以我使用画布的机会。这个脚本运行良好,但问题是当我尝试从较大的图片缩放到较小的图片时(我希望每个图片将在浏览器窗口中固定为500像素高度)。我提出一个脚本的电流下图:HTML5画布 - 可缩放部分的预览和图像的不同尺寸
function updatePreview(c)
{
if (parseInt(c.w) > 0)
{
var rx = 200/c.w;
var ry = 300/c.h;
// Show canvas image preview2
var imageObj = $("#target")[0];
var canvas = $("#preview2")[0];
var context = canvas.getContext("2d");
canvas.setAttribute('width', '200');
canvas.setAttribute('height', '300');
//context.scale(2, 2);
context.drawImage(imageObj, c.x, c.y, c.w, c.h, 0, 0,
canvas.width, canvas.height);
$('#preview').css({
width: Math.round(rx * boundx) + 'px',
height: Math.round(ry * boundy) + 'px',
marginLeft: '-' + Math.round(rx * c.x) + 'px',
marginTop: '-' + Math.round(ry * c.y) + 'px'
});
}
};
而且这里有一个简单的HTML代码,让脚本来处理
<table>
<tr>
<td>
<img src="http://imgon.net/di-M7Z9.jpg" id="target"
alt="obrazek" height="450"/>
</td>
<td>
<div style="width:200px;height:300px;overflow:hidden;">
<img src="http://imgon.net/di-M7Z9.jpg" id="preview" alt="Preview" />
</div>
<br />
<div>
<canvas id="preview2" style="width:200px;height:300px;"></canvas>
</div>
</td>
</tr>
</table>
的第一个预览版是基于CSS和它工作正常,但CSS只包含图片的一部分,而不是实际剪切它。对比而言,画布在高分辨率下看到图片,预览不会反映缩放图片的片段(我只有放大部分)。这发生在Firefox中。对于Internet Explorer是一个特殊的库,并且画布的结果与CSS相同。我最后的问题是。我怎么能说这个函数为缩放图像创建预览,而不是预览原始分辨率?我试图把变量c.y替换为Math.round(rx * boundx)和cx Math.round(ry * boundy),但它是不正确的。 我在这里给你一个页面,你可以看到脚本直播:agd-brita.pl/mobile2/tutorial.html 我请求你的帮助。感谢您的提前。
我完全同意你的意见。 ralImageCrop是正确的公式。过了很久,我也遇到了这个问题。但我们现在需要知道真正的图像维度。因为我们只知道宽度和高度已经重新调整了图像。所以我们需要一些功能,使实际图像尺寸始终重新调整为恒定尺寸。 – kassprek 2012-04-06 14:40:33
你试过我的小提琴吗? – 2012-04-06 16:10:57
你必须等到文档被加载,否则你不能在DOM上工作!小提琴为你做(看左边的栏),但你必须插入JS到$(document).ready(...) – 2012-04-07 06:15:53