Миниатюры из графической магии без апскейлинга

Я использую графическую магическую оболочку в nodejs и создаю квадратные миниатюры, используя следующий код:

var size = {width: 200, height: 200};
gm(sourcePath)
  .resize(size.width * 2, (size.height * 2) + '')
  .thumbnail(size.width, size.height + '^')
  .gravity('center')
  .extent(size.width, size.height)
  .profile('*')
  .write(outputPath, function (error) {
    if (error) console.log('Error - ', error);
  });

Это работает хорошо, пока размер моего эскиза не станет больше, чем входное изображение. В этом случае я хотел бы, чтобы миниатюра была предписанного размера, но чтобы изображение было помещено в центр, а не изменено.

Есть ли способ сделать это с помощью группы команд или мне нужно написать какую-то отдельную логику, чтобы определить это?


person Derek Ekins    schedule 05.02.2013    source источник


Ответы (1)


В итоге я использовал GM напрямую для этого, используя эту команду:

gm convert inputPath -resize "200x200>" -gravity center -extent 200x200 outputPath

Это создаст изображение 200x200 с центрированным в нем входным изображением, они -resize 200x200> часть (обратите внимание на >) означает только изменение размера, чтобы он был меньше, а не больше

Эквивалентная команда с использованием модуля gm в узле:

var size = {width: 200, height: 200};
gm(sourcePath)
  .resize(size.width, size.height + ">")
  .gravity('Center')
  .extent(size.width, size.height)
  .write(outputPath, function (error) {
    if (error) console.log('Error - ', error);
  });
person Derek Ekins    schedule 08.02.2013