Imagick:: resizeImage vs Imagick:: scaleImage
В чем разница между 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/ Но может ли кто-нибудь упростить это?
Ответы
Ответ 1
Разница между двумя, по-видимому, заключается в том, что scaleImage
использует исходный размер пикселя, а resizeImage
может использовать фильтр интерполяции:
imagick::INTERPOLATE_AVERAGE
imagick::INTERPOLATE_BICUBIC
imagick::INTERPOLATE_BILINEAR
...
что может привести к лучшим результатам.
Подробнее о различных методах интерполяции на Wikipedia.
Ответ 2
Блестящий, их собственная документация ужасна... Но хорошо: мне кажется, что resizeImage более мощный, и поэтому лучший выбор... Это link показывает использование вместе с некоторыми измерениями для разных фильтров.
Ответ 3
Согласно моему выводу, когда вы хотите уменьшить изображение, используйте resizeImage. Потому что он дает вам контроль над качеством изображения и типом фильтра, который вы хотите использовать. Но в том же случае scaleImage также является хорошим выбором, потому что, когда вам нужно масштабировать изображение, чтобы позволить говорить в 10 раз, и вы используете resizeImage, то получившееся изображение будет иметь много графических ошибок.
Во втором случае, когда вам нужно масштабировать изображение и изображение, тогда resizeImage определенно будет иметь графическую ошибку, например, в виде меток и строк и других вещей. В этом случае scaleImage придет на помощь.