#html #canvas
#HTML #холст
Вопрос:
Я сделал краткий пример на http://yc.sg/fantaspic/compare.html. Это некрасиво и предназначено только для функций. Он использует FileAPIs, ничего не отправляется на сервер, поэтому не стесняйтесь попробовать использовать любую фотографию: P. Хорошо, чтобы использовать ее, просто просмотрите, выберите фотографию и нажмите ok, затем обрезайте.
Изображение в левом нижнем углу перерисовано с использованием холста HTML 5 (с исходным изображением в качестве источника), в то время как изображение в правом нижнем углу — это просто div с перемещением исходного изображения. Изображение на холсте всегда имеет более низкое качество, хотя это всего лишь простая обрезка.
Вы можете просмотреть исходный код и посмотреть, как это работает, но основной метод обрезки заключается в следующем:
function preview(img, selection) {
var scaleX = previewWidth / selection.width;
var scaleY = previewHeight / selection.height;
$('#cropped-image').css({
width: Math.round(scaleX * truew) 'px',
height: Math.round(scaleY * trueh) 'px',
marginLeft: '-' Math.round(scaleX * selection.x1) 'px',
marginTop: '-' Math.round(scaleY * selection.y1) 'px'
});
selx1 = selection.x1;
sely1 = selection.y1;
selx2 = selection.x2;
sely2 = selection.y2;
selw = selection.width;
selh = selection.height;
var canvas = $("#preview")[0];
var context = canvas.getContext("2d");
context.drawImage(img, selx1, sely1, selw, selh, 0, 0, canvas.width, canvas.height);
}
Комментарии:
1. Я не вижу разницы. OSX, Opera
Ответ №1:
К элементам холста HTML5 прикреплены свойства width и height, которые настраивают область просмотра холста. Оба этих свойства не совпадают с их аналогами в css.
Рассмотрим обычное растровое изображение. Размер изображения фиксирован и не может быть изменен в браузере. Однако свойства css width и height позволяют масштабировать и искажать изображение. Иногда это некрасиво, потому что браузеры, как правило, используют простые алгоритмы изменения размера.
То же самое с вашим холстом. Установленный вами видовой экран (или экран по умолчанию) используется для определения того, где отображаются пиксели. Таким образом создается растровое изображение, размер которого впоследствии изменяется с помощью css.
В вашем случае изображение холста немного увеличено, потому что ваши значения css (320, 320) отличаются от значений видового экрана по умолчанию (300,300). Просто попробуйте настроить свой видовой экран заранее, и все должно выглядеть нормально.
$(function () {
var $preview = $("#preview"),
preview = $preview[0];
preview.width = $preview.width();
preview.height = $preview.height();
});
Комментарии:
1. Спасибо :). Я сделал, как вы предложили, и обновил HTML по ссылке, но качество по-прежнему заметно падает.