【发布时间】:2016-10-23 04:03:49
【问题描述】:
我正在尝试制作一个画布应用程序并且我获得了成功。我只是停留在画布输出的打印图像中。图像尺寸太小,无法打印。
以下是申请流程:
- 上传图片并绘制到画布上。
- 在分割画布上进行缩放、移动和旋转等操作。
- 我已经成功地从这些分割中生成了单个图像
- 我已将 base64 从画布导出到打印过程。
当我从画布导出数据时,问题就在这里,它是小图像,即使我做了一些 Imagick 的事情来调整最终图像的图像质量,也无法在海报上打印。
JavaScript:
function draw() {
var Activecanvas = document.getElementsByClassName("cf-photoframe-active");
var canvas = Activecanvas[0];
var ctx = canvas.getContext('2d');
var ActiveCanvasId = canvas.getAttribute("id");
var img = canvasDetail[ActiveCanvasId].selectedImage;
var imageX = canvasDetail[ActiveCanvasId].imageX;
var imageY = canvasDetail[ActiveCanvasId].imageY;
var resize = resizeDetail[ActiveCanvasId].resize;
var rotate = rotateDetail[ActiveCanvasId].rotate;
//if(resize)
$j("#resize").slider({
value: resize,
min: -300,
max: 300,
step: 1,
});
$j("#rotat").slider({
value: rotate,
min: -180,
max: 180,
step: 1,
});
if (img != '') {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
var im_width = parseInt(img.width + $j("#resize").slider('value'));
var im_height = parseInt(img.height + $j("#resize").slider('value'));
var maxWidth = canvas.width; // Max width for the image
var maxHeight = canvas.height;
var iswidthMax = 0;
var imageOrgWidth = img.width;
var imageOrgHeight = img.height;
if (maxWidth < maxHeight) {
iswidthMax = 1;
} else if (maxWidth == maxHeight) {
iswidthMax = 2;
}
if (iswidthMax == 1) {
maxWidth = (maxHeight * imageOrgWidth) / imageOrgHeight;
} else if (iswidthMax == 0) {
maxHeight = (maxWidth * imageOrgHeight) / imageOrgWidth;
} else if (iswidthMax == 2) {
if (img.width > img.height) {
maxWidth = (maxHeight * imageOrgWidth) / imageOrgHeight;
} else {
maxHeight = (maxWidth * imageOrgHeight) / imageOrgWidth;
}
}
var resizeVal = $j("#resize").slider('value');
var nw = maxWidth + resizeVal;
var resizeValHeight = maxHeight * resizeVal / maxWidth;
var nh = maxHeight + resizeValHeight;
ctx.translate(imageX, imageY);
ctx.rotate(rotate * Math.PI / 180);
ctx.translate(-nw / 2, -nh / 2);
ctx.drawImage(img, 0, 0, nw, nh);
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.restore();
}
}
【问题讨论】:
-
确保在绘制之前设置好画布的大小(宽度/高度)。它应该是绘图操作之前所需的尺寸。您需要发布一些您正在使用的代码。
-
我已经将 size(width/height) 设置为 HTML 内联属性。在这里我放了 Draw 函数
-
不,那没用。您需要通过 JavaScript 设置宽度和高度,例如
canvas.width = img.width; canvas.height = img.height;元素的维度与内部数据的维度不同。如果您不手动设置,您将获得默认的内部尺寸。见这里,尤其是公认的答案:stackoverflow.com/questions/4938346/… -
如果我将图像大小分配给画布大小,那么在画布上分割图像和移动图像是行不通的。他们失败了。所以要解决这个问题,我只需将图像缩小并执行所有其他操作。
-
这就是为什么您的数据输出中画布尺寸减小的原因。您不能缩小图像,然后再次备份并期望它看起来不错。当您从中输出数据时,画布必须是您期望的大小,否则在调整大小时它会变小且模糊。
标签: javascript printing html5-canvas imagick dpi