Imagick::Изменение размера изображения по сравнению с Imagick::Масштабирование изображения
В чем разница между resizeImage
и scaleImage
?
Мне нужно изменить размер изображения, если его размер > $mylimit
Пример (псевдокод):
$myLimit = 1MB
user uplaod an image of 1000x1000 of 2MB
2MB > $myLimit
while( $imagefilesize > $myLimit ) {
resizeImageBy 0.9%;
}
//> output 900x900 image of 900 kB
В блоке while
какой из двух методов я должен использовать?
Редактировать: Я нашел кое-что, что могло бы помочь: http://www.imagemagick.org/Usage/resize / Но может ли кто-нибудь упростить это?
3 answers
Разница между ними, по-видимому, заключается в том, что scaleImage
выполняет необработанный размер на основе пикселей, в то время как resizeImage
может использовать интерполяционный фильтр:
imagick::INTERPOLATE_AVERAGE
imagick::INTERPOLATE_BICUBIC
imagick::INTERPOLATE_BILINEAR
...
Это, вероятно, приведет к лучшим результатам.
Подробнее о различных методах интерполяции в Википедии.
Блестяще, их собственная документация ужасна... Но хорошо: мне кажется, что resizeImage более мощный, и, следовательно, лучший выбор... Эта ссылка показывает использование вместе с некоторыми измерениями для различных фильтров.
Согласно моим выводам, когда вы хотите уменьшить изображение, используйте изменение размера изображения. Потому что это дает вам контроль над качеством изображения и типом фильтра, который вы хотите использовать. Но в том же случае scaleImage также является хорошим выбором, потому что, когда вам нужно уменьшить изображение, скажем, в 10 раз, и вы используете resizeImage, в вашем результирующем изображении будет много графических ошибок.
Во втором случае, когда вам нужно увеличить масштаб и изображение, то изменение размера изображения определенно будет иметь графическая ошибка, такая как отметки, линии и прочее. В этом случае scaleImage придет на помощь.