Эта статья сокращена от:Ууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууууу
1. Функциональный опыт
Первый взгляд на демо:Используйте холст для сжатия изображений во внешнем интерфейсе и загрузки демо.
Скриншот ниже:
Нажмите на поле выбора файла, мы могли бы также выбрать более крупную картинку, например следующую фотографию улова рыбалки размером более 2M:
Итак, картинки были загружены одна за другой:
На этом этапе, когда мы нажмем на окончательный адрес загруженного изображения, мы обнаружим, что исходное изображение шириной более 2M и более 3000 пикселей ограничено шириной 400 пикселей:
Если вы сохраните его локально, вы обнаружите, что размер изображения стал всего 70 КБ:
Выше приведена полная демонстрация внешнего сжатия изображений и демо-загрузки.
Во-вторых, принцип реализации
Чтобы использовать JS для сжатия изображений, принцип на самом деле очень прост, основной API должен использоватьcanvas
изdrawImage()
метод.
Canvas по сути является растровым изображением, иdrawImage()
Метод может нарисовать большую картинку на маленьком холсте Canvas, что эквивалентно сжатию размера изображения в ближайшее время?
Для сжатия этого случая используется метод API с 5 параметрами:
context.drawImage(img, dx, dy, dWidth, dHeight);
Конкретное значение каждого параметра см. в разделе "Документация по Canvas API на китайском языке-drawImage", здесь не раскрыто.
Пример:
изображение (при условии, что объект изображенияimg
) исходный размер 4000*3000, а теперь нужно ограничить размер до 400*300, что очень просто.Принцип такой:
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
canvas.width = 400;
canvas.height = 300;
// 核心JS就这个
context.drawImage(img,0,0,400,300);
Нарисуйте большую картину на маленьком холсте, а компрессия реализована так, не правда ли просто и немного за гранью воображения.
3. Если вы хотите загрузить или скачать?
Если вы хотите загрузить изображения или загрузить изображения, вы можете использоватьcanvas.toDataURL()
илиcanvas.toBlob()
метод преобразуется первым.
canvas.toDataURL(mimeType, qualityArgument)
Холст может быть преобразован в информационную информацию формата base64, графическое представление чистых символов.
в:mimeType
выражатьcanvas
экспортируетсяbase64
Тип изображения, по умолчанию формат png, то есть значение по умолчанию'image/png'
, мы также можем указать формат jpg'image/jpeg'
Или webp и другие форматы.file
в объектеfile.type
Это тип mimeType файла, который можно использовать непосредственно при конвертации (при наличии файлового объекта).qualityArgument
Указывает качество экспортируемого изображения, если экспортjpg
иwebp
Этот параметр действует только при использовании формата Значение по умолчанию:0.92
, является приемлемым выходным параметром качества изображения, обычно его не нужно задавать.
Дополнительную информацию о методе toDataURL() можно найти в разделе "Документация Canvas API на китайском языке-toDataURL()".
canvas.toBlob(callback, mimeType, qualityArgument)
Можно преобразовать холст вBLOB-файл, обычно используемый при загрузке файлов, поскольку он двоичный и более удобен для серверной части.
иtoDataURL()
По сравнению с методом,toBlob()
Метод асинхронный, поэтомуcallback
параметр, этоcallback
Первый параметр метода обратного вызова по умолчанию — преобразованный.blob
Информация о файле, загрузка файла в демонстрационном примере в начале этой статьи заключается в загрузкеcanvas
Преобразование изображения в двоичноеblob
файл, а затемajax
Загрузил, код такой:
// canvas转为blob并上传
canvas.toBlob(function (blob) {
// 图片ajax上传
var xhr = new XMLHttpRequest();
// 开始上传
xhr.open("POST", 'upload.php', true);
xhr.send(blob);
});
Дополнительную информацию о методе toBlob() можно найти в разделе "Документация по Canvas API на китайском языке-toBlob()".
Когда у вас есть передаваемые данные изображения, можно выполнять загрузку и загрузку. Например, чтобы загрузить сжатый образ внешнего интерфейса, вы можете обратиться к моей последней статье, опубликованной на Nuggets: "Чистый JS генерирует и загружает различные текстовые файлы или изображения".
4. Резюме
После трех шагов «изображение → сжатие холста → изображение» мы завершили функцию внешнего сжатия изображения.
Выше, спасибо за чтение!