Html 画布缩小图像质量损失
我编写了一个用于缩放画布图像的代码,但是如果尝试多次缩放图像,图像质量会发生变化。 这是我使用canvas2image插件的代码,我正在将canvas转换为普通图像 有没有人能告诉我,我有没有做错什么事Html 画布缩小图像质量损失,html,canvas,html5-canvas,Html,Canvas,Html5 Canvas,我编写了一个用于缩放画布图像的代码,但是如果尝试多次缩放图像,图像质量会发生变化。 这是我使用canvas2image插件的代码,我正在将canvas转换为普通图像 有没有人能告诉我,我有没有做错什么事 function imgZoom(operation) { var zoomImageObj = document.getElementById("originalImage"); var zoomedCanvas = $("#zoomCanvasPreview")[0];
function imgZoom(operation) {
var zoomImageObj = document.getElementById("originalImage");
var zoomedCanvas = $("#zoomCanvasPreview")[0];
var zoomedContext = zoomedCanvas.getContext("2d");
var selectedImgWidth = $('#originalImage').width();
var selectedImgHeight = $('#originalImage').height();
$("#zoomCanvasPreview").attr("height", selectedImgHeight);
$("#zoomCanvasPreview").attr("width", selectedImgWidth);
var previewHeight = $("#zoomCanvasPreview").height();
var previewWidth = $("#zoomCanvasPreview").width();
var zoomFactor = $("#zoomFactor option:selected").val();
// Making the zoomfactor string as float point then parsing for addition
// zoomFactor values if user selected 5%(0.05), 10%(0.1), 15(0.15) &etc
var zoomPercent = 1 + parseFloat(zoomFactor);
if(operation == 'zoomIn') {
newZoomWidth = Math.round(previewWidth * zoomPercent) ;
newZoomHeight = Math.round(previewHeight * zoomPercent) ;
} else if(operation == 'zoomOut'){
newZoomWidth = Math.round( previewWidth / zoomPercent );
newZoomHeight = Math.round( previewHeight / zoomPercent );
}
if( (newZoomWidth >= 0) && (newZoomHeight >= 0) )
{
$("#zoomCanvasPreview").attr("width", newZoomWidth);
$("#zoomCanvasPreview").attr("height", newZoomHeight);
// Drawing the image to canvas
zoomedContext.drawImage(zoomImageObj, 0, 0, imgWidth, imgHeight, 0, 0, newZoomWidth, newZoomHeight );
//return canvas.toDataURL("image/png");
var zoomedCanvas = $("#zoomCanvasPreview")[0];
oImgConvertExt = Canvas2Image.saveAsPNG(zoomedCanvas, true);
$("#originalImage").attr("src", oImgConvertExt.src);
$("#originalImage").attr("style", "display: none; visibility: hidden; width: "+newZoomWidth+"px; height: "+newZoomHeight+"px;");
} else {
alert("Reached maximum zoom out limit");
}
}
如果使用.SVG格式的图像,图像质量将不会改变
即使放大或缩小,这些图像也不会失真。如果使用canvas.drawImage,则无法避免质量损失 只需通过更改CSS宽度和高度值进行缩放。那就不会有任何质量损失了 编写代码也简单得多