私はキャンバスアプリケーションを作成しようとしています。私はちょうどキャンバスの出力である印刷イメージにこだわった。画像のサイズが小さすぎて十分に印刷できません。キャンバスから印刷サイズ(300 DPI)でイメージをエクスポート
- アップロード画像やキャンバスに描く:
後は、アプリケーションのフローです。
- 分割キャンバスでズーム、移動、回転などの操作を行います。
- 私はこれらの分割から1つのイメージを正常に生成しました
- そして、私はキャンバスから印刷プロセスに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();
}
}
は、あなたがそれに描画する前に、あなたのキャンバスのサイズ(幅/高さ)を設定していることを確認してください...次のようなものをやって1枚のより大きなキャンバスにそれらを再結合する必要があります。描画操作の前に必要なサイズにする必要があります。使用しているコードの一部を投稿する必要があります。 – ManoDestra
私は既にHTMLのインライン属性としてサイズ(幅/高さ)を設定しています。ここに私は入れます** Draw ** function – chudasamachirag
いいえ、それは役に立たないです。 JavaScriptを使用して幅と高さを設定する必要があります。 'canvas.width = img.width; canvas.height = img.height; '要素の寸法は、内部データの寸法とは異なります。手動で設定しないと、デフォルトの内部寸法が取得されます。ここでは、特に受け入れられた答えを参照してください:http://stackoverflow.com/questions/4938346/canvas-width-and-height-in-html5 – ManoDestra