Здесь было задано несколько вопросов, связанных с моим, но я все еще борюсь.
Я использую html2canvas для создания холста определенных частей моего веб-приложения. Здесь у меня первый вопрос: документация дает ряд опций (ширина, высота, масштаб), которые создают впечатление, что они предназначены для манипулирования размером результирующего изображения. Я хотел бы уменьшить размер результата по сравнению с оригинальным div. Однако, что бы я ни делал, я не понимаю. Если я установлю ширину / высоту меньше, чем оригинальный div, он просто берет только часть div (он в основном обрезается). И масштаб, похоже, влияет на соотношение между шириной / высотой холста и шириной / высотой стиля CSS. На самом деле он не уменьшает содержимое оригинального размера на меньший холст.
Что ж, я мог бы с этим смириться и перейти к полученному холсту того же размера, что и оригинальный div, поскольку существует еще один хороший вариант для масштабирования изображений на стороне клиента.
Я пытаюсь перерисовать холст на меньшем, используя drawImage с соответствующими context.width, context.height и context.scale.It работает, но что бы я ни пытался, конечный результат довольно размыт. Обратите внимание, что я DOWNscaling (даже не UPscaling) простых изображений, а не изображений в высоком разрешении. Скриншот результата:
Сверху оригинальный div, чуть ниже немасштабированного результата после html2canvas, а справа уменьшенный после:
ctx.drawImage (canvas, 0, 0, width, height);
Мой JavaScript:
function init() {
$('#testBtn').on('click', function(){proces();});
}
function proces() {
var testElem = document.getElementById("container");
var options = {
//I could play here with width, height and scale
};
html2canvas(testElem, options).then(function(canvas) {
canvas.id = "resultCanvas";
document.body.appendChild(canvas);
var width = canvas.width;
var height = canvas.height;
var scale = 0.5 / 1.25;
console.log(width, height)
//var scaledCanvas = document.getElementById("testScaledCanvas");
var scaledCanvas = document.createElement("canvas");
scaledCanvas.id = "testScaledCanvas";
scaledCanvas.height = scale * height;
scaledCanvas.width = scale * width;
var ctx = scaledCanvas.getContext("2d");
ctx.scale(scale, scale);
ctx.webkitImageSmoothingEnabled = false;
ctx.mozImageSmoothingEnabled = false;
ctx.msImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
//Draw the scaled canvas
ctx.drawImage(canvas, 0, 0, width, height);
document.body.appendChild(scaledCanvas);
});
}
Итак, в итоге, уменьшение холста приводит к размытым изображениям. И я не могу заставить html2canvas правильно сжать div на меньшем холсте. Это только урожай.
Любая помощь будет принята с благодарностью!
Mark