2015-01-14 2 views
2

Я хотел бы изменить размер загруженных изображений в браузере. Я использую холст, чтобы нарисовать загруженное изображение на холст, а затем изменить его размер и использовать результат из метода toDataURL.Canvas toDataURL без альфа-канала

Упрощенный код (без загружаемых частей) выглядит примерно так:

var canvas = document.createElement('canvas'); 
var ctx = canvas.getContext('2d', { alpha: false}); 
// img src contains data url of uploaded image 
ctx.drawImage(img, 0, 0, imgWidth, imgHeight); 
var dataUrl = canvas.toDataURL('image/png'); 

Проблема заключается в том dataUrl содержит альфа-канал, хотя контекст был создан с альфа-значение ЛОЖЬ.

Возможно ли получить URL-адрес данных без альфа-канала?

Если нет, я рассмотрел использование одной из библиотек изображений Javascript, но большинство из них полагаются на холст.

Кроме того, я мог бы кодировать изображение, используя данные в холсте, но я предпочел бы не делать :)

ответ

3

alpha:false используется только в WebGL. Он игнорируется при создании 2d-контекста.

Но вы можете экспортировать холст в формате JPG, где устранен ненужный альфа:

// export a full-quality jpg dataUrl 

canvas.toDataURL("image/jpeg", 1.0); 
+1

Спасибо, что это полезная информация! Просто забыл упомянуть о том, что требуется формат png. Я думаю, это невозможно с помощью метода toDataURL. – nutrija

+1

Ну, я думаю, вы могли бы создать новый Image(), используя .jpg dataUrl как свой src. Затем drawImage, что непрозрачное изображение на холст. Затем .toDataURL ('image/png') второй раз, чтобы получить альфа-сплющенные данныеUrl. Одна из возможных проблем заключается в том, что браузеру разрешено использовать альфа-и гамма-правильные рисунки холста, поэтому возможно, что некоторые альфа-файлы повторно введены во время второго .drawImage. Попробуйте и посмотрите, подходит ли оно вашим потребностям. Удачи с вашим проектом! :-) – markE