Как масштабировать изображение (в формате Data URI) в JavaScript (реальное масштабирование, без использования стиля)
Мы захватываем видимую вкладку в браузере Chrome (с помощью расширений API chrome.вешалки.captureVisibleTab) и получение моментального снимка в схеме URI данных (кодированная строка Base64).
Существует ли библиотека JavaScript, которая может быть использована для масштабирования изображения до определенного размера?
В настоящее время мы стилизуем его с помощью CSS, но должны платить штрафы за производительность, так как изображения в основном в 100 раз больше, чем требуется. Дополнительной проблемой является также нагрузка на локальный склад, который мы используем чтобы сохранить наши снимки.
Кто-нибудь знает способ обработки этой схемы URI данных форматированных изображений и уменьшения их размера путем масштабирования их вниз?
Ссылки:
- схема URI данных на http://en.wikipedia.org/wiki/Data_URI_scheme
- Chrome Extensions API on http://code.google.com/chrome/extensions/tabs.html
- расширение Chrome "недавно закрытые вкладки" на http://code.google.com/p/recently-closed-tabs
2 ответа:
Вот функция, которая должна делать то, что вам нужно. Вы даете ему URL изображения (например, результат из
chrome.tabs.captureVisibleTab
, но это может быть любой URL), желаемый размер и обратный вызов. Он выполняется асинхронно, поскольку нет никакой гарантии, что изображение будет загружено сразу же после установки свойстваsrc
. С URL-адресом данных он, вероятно, будет, так как ему не нужно ничего скачивать, но я его не пробовал.Обратный вызов будет передан результирующее изображение в качестве URL-адреса данных. Обратите внимание, что полученное изображение будет PNG, так как реализация Chrome
toDataURL
не поддерживает image / jpeg.function resizeImage(url, width, height, callback) { var sourceImage = new Image(); sourceImage.onload = function() { // Create a canvas with the desired dimensions var canvas = document.createElement("canvas"); canvas.width = width; canvas.height = height; // Scale and draw the source image to the canvas canvas.getContext("2d").drawImage(sourceImage, 0, 0, width, height); // Convert the canvas to a data URL in PNG format callback(canvas.toDataURL()); } sourceImage.src = url; }
Что касается проблем с производительностью, может быть, тег canvas может помочь? https://developer.mozilla.org/en/Canvas_tutorial/Using_images#drawImage_example_2
Если вы загрузите изображение, отобразите его с помощью drawImage, а затем попытаетесь удалить его, возможно, Вам это удастся. Но я не знаю, как сериализовать холст в виде изображения, чтобы сохранить файл с измененным размером...