【发布时间】:2018-07-19 08:34:28
【问题描述】:
我编写了一些代码,旨在:
- 将图像缩小指定量。
- 将缩小的图像添加到 pdf(使用 jspdf)
我可以在浏览器中看到缩放(或缩小)的图像,但是 pdf 中的“缩放”图像与原始图像大小相同。我怀疑我的缩小方法只会改变图像的样式属性,而不是图像数据。如何有效地“缩小”图像?
谢谢, 马特
function CreateNewImageSmaller(dataUrl, value) {
//console.log('createNewImage');
var img = new Image;
img.src = dataUrl;
img.width = img.width * ((value / 100));
img.height = img.height * ((value / 100));
return img;
//var container = document.getElementById("container-smaller");
//container.appendChild(img);
}
function doCanvas() {
/* draw something */
var canvas = document.getElementById('original-canvas');
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#f90';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = '#fff';
ctx.font = '60px sans-serif';
ctx.fillText('Code Project IE', 10, canvas.height / 2 - 15);
ctx.font = '26px sans-serif';
ctx.fillText('Click link above to save this as image', 15, canvas.height / 2 + 35);
cropCanvas();
}
function downloadCanvas(link, canvasId, filename) {
var canvas = document.getElementById('original-canvas');
var imgData = canvas.toDataURL();
var img = new Image();
img.filename = filename;
img.onload = split_4;
img.src = imgData;
}
function split_4() {
//var container = document.getElementById("imagediv");
// container.appendChild(this);
var wA4 = 842;
var hA4 = 595;
var originalCanvas = document.getElementById('original-canvas');
var offScreenCanvas = document.createElement('canvas');
offScreenCanvas.width = originalCanvas.width;
offScreenCanvas.height = originalCanvas.height;
var ctx = offScreenCanvas.getContext('2d');
//console.log('oscW:' + offScreenCanvas.width + ' oscH:' + offScreenCanvas.height);
//# a4pages wide
var numA4PagesWide = Math.ceil(this.width / wA4);
//# a4pages high
var numA4PagesHigh = Math.ceil(this.height / hA4);
//console.log(numA4PagesWide + ", " + numA4PagesHigh);
var doc = new jsPDF('l', 'pt', 'a4');
var sx = 0;
var sy = 0;
var sw = wA4;
var sh = hA4;
var dx = 0;
var dy = 0;
var dw = wA4;
var dh = hA4;
for (var i = 0; i < numA4PagesHigh; i++) {
y = i * hA4;
sy = i*hA4;
dy = 0;
sh = hA4;
dh = hA4;
for (var j = 0; j < numA4PagesWide; j++) {
if ((i!=0)| (j >0)){
doc.addPage();
//console.log('added page');
}
//console.log('i:' + i + ' j' + j);
sx = j * wA4; // starting x will be the A4 page
dx = 0;
sw = wA4;
dw = wA4;
ctx.drawImage(this,
sx, sy, // Start at sx/sy pixels from the left and the top of the image (crop),
sw, sh, // "Get" a `sw * sh` (w * h) area from the source image (crop),
dx, dy, // Place the result at dx, dy in the canvas,
dw,dh); // With as width / height: dw * dh (scale)
doc.addImage(offScreenCanvas.toDataURL(), 'JPEG',0,0, offScreenCanvas.width, offScreenCanvas.height,'alias' + i + j, 'FAST');
ctx.clearRect(0,0,offScreenCanvas.width,offScreenCanvas.height, 'alias' + i + j, 'FAST');
}
}
doc.save(this.filename + '.pdf');
};
function downloadCanvasAndShrink(link, canvasId, filename) {
var canvas = document.getElementById('original-canvas');
var imgData = canvas.toDataURL();
var imgSmaller = CreateNewImageSmaller(imgData,50);
var container = document.getElementById("imagediv");
container.appendChild(imgSmaller);
var img = new Image();
img.filename = filename;
img.onload = split_4;
img.src = imgSmaller.src;
}
/**
* The event handler for the link's onclick event. We give THIS as a
* parameter (=the link element), ID of the canvas and a filename.
*/
document.getElementById('download').addEventListener('click', function() {
downloadCanvas(this, 'original-canvas', 'test');
downloadCanvasAndShrink(this, 'original-canvas', 'shrunk');
}, false);
/**
* Draw something to canvas
*/
doCanvas();
body {
background-color:#555557;
padding:0;
margin:0;
overflow:hidden;
font-family:sans-serif;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
canvas {
border:1px solid #000;
float:left;
clear:both;
}
#download {
float:left;
cursor:pointer;
color:#ccc;
padding:3px;
}
#download:hover {
color:#fff;
}
/*
div, input {
font-size:16px;
font-family:sans-serif;
border:1px solid #000;
border-radius: 5px;
float:left;
padding:5px;
width:50px;
margin:1px 1px;
background-color:#bbb;
}
input[type='text'] {
font-size:16px;
font-weight:bold;
width:70px;
text-align:center;
background-color:#fff;
padding-bottom:4px;
}
input[type='button'] {
font-size:16px;
font-weight:bold;
width:110px;
text-align:center;
background-color:#333;
color:#eee;
padding-bottom:4px;
}
input[type='button']:hover {
background-color:#fff463;
color:#000;
}
input[type='range'] {
width:100px;
margin:0 0 0 10px;
}
*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="download">Shrink Image and Download as pdf</a>
<canvas width="1000" height="170" id="original-canvas">Sorry, no canvas available</canvas>
<div id="imagediv"></div>
【问题讨论】:
标签: javascript image jspdf