Como processe arquivos JPG usando o ImageMagick (Imagick API)? Estou recebendo uma exceção, nodecodedElegateForthisImageFormat, quando eu tento
Pergunta
Estou usando o ImageMagick com a API do PHP Imagick para processar arquivos JPG enviados - no entanto, quando tento ler um blob ou até ler um arquivo físico, eu recebo um NoDecodeDelegateForThisImageFormat
exceção.
Um exemplo do código que estou usando está abaixo:
private function resizeImageBlob($blob, $width, $height) {
$image = new Imagick();
$image->readImageBlob($blob);
$image->resizeImage($width, $height, IMAGICK::FILTER_LANCZOS, 1);
$resizedBlob = $image->getImageBlob();
return $resizedBlob;
}
A imagem que a bolha representa é uma imagem JPG, mas o ImageMagick lança a exceção quando tenta ler a linha:
$image->readImageBlob($blob);
Alguém sabe por que isso pode estar acontecendo?
Solução
Eu descobri a resposta para o meu problema. A razão pela qual a exceção estava ocorrendo foi de fato devido ao fato de a biblioteca não ter suporte de JPEG incorporado, mas a razão que isso aconteceu foi porque a versão do Imagick Php Extension e a versão da Biblioteca Imagemagick foram diferentes.
Uma boa maneira de garantir que não encontre esse problema é baixar a biblioteca ImageMagick e a extensão PHP Imagick, e observe especificamente as versões para ver que elas correspondem.
Como alternativa, você pode verificar a versão da sua extensão PHP Imagick na pasta PHP/EXT, habilitando -a no seu arquivo php.ini e usando
echo phpinfo();
Para verificar a versão da extensão. Em seguida, você pode baixar a mesma versão da biblioteca ImageMagick.