Как конвертировать изображение в webp используя gm в node.js
Я использовал gm
для изменения размера изображений. Теперь я узнаю о webp
ускорить мой сайт. Поэтому я хочу конвертировать изображения в webp
используя ту же библиотеку. Но следующее не работает.
Как я могу конвертировать изображения в webp
от gm
?
function resize(last) {
self.resize(width, height)
.quality(80)
.strip()
.gravity('Center')
.toBuffer(imageType, function(err, buffer) {
if (err) last(err);
else last(null, buffer);
});
},
РЕДАКТИРОВАТЬ
gm('thumb_3.JPG')
.toBuffer('webp', (err, buffer) => {
fs.writeFile('buffer.webp', buffer, console.log)
})
Я также использую этот код
2 ответа
Все, что вам нужно сделать, это позвонить:
.toBuffer('webp', (err, buffer) => { /* ... */ })
Или используя streams
.stream('webp');
Но чтобы это работало, вы должны явно установить imagick с webp
brew install imagemagick --with-webp
В противном случае установите graphicsmagick
что поддерживает webp
непосредственно.
В зависимости от вашей ОС:
Ubuntu / Debian
sudo apt-get install graphicsmagick
Mac OS
brew install graphicsmagick
Для Windows или другой ОС, проверьте:
Рабочий пример:
const fs = require('fs');
const gm = require('gm');
gm('/tmp/img.jpg')
.stream('webp')
.pipe(fs.createWriteStream('/tmp/img.webp'));
gm('/tmp/img.jpg')
.toBuffer('webp', (err, buffer) => {
fs.writeFile('/tmp/img-buffer.webp', buffer, console.log)
})
Для меня я использую версию GM 1.3.30
и это не включает webp
автоматически. вместо этого вам нужно установить его вручную
Проверять, gm -version
Feature Support:
Native Thread Safe yes
Large Files (> 32 bit) yes
Large Memory (> 32 bit) yes
BZIP yes
...
WebP no
WMF no
X11 no
XML yes
ZLIB yes
установить с заваркой,
brew install graphicsmagick --with-webp
если вы уже установили его до того
brew reinstall graphicsmagick --with-webp
в том числе webp
решит вопрос Stream yields empty buffer
также.
удачи!