Images become blurry on downscale since I updated to v7

IMagick is a native PHP extension to create and modify images using the ImageMagick API. ImageMagick Studio LLC did not write nor does it maintain the IMagick extension, however, IMagick users are welcome to discuss the extension here.
Post Reply
Trost
Posts: 3
Joined: 2017-06-26T06:25:51-07:00
Authentication code: 1151

Images become blurry on downscale since I updated to v7

Post by Trost » 2017-06-26T06:37:09-07:00

My hosting provider decided to update software on their servers, and this had side-effects for me :(
They updated Imagick and\or ImageMagick and now, the function "resizeImage()", which used to work perfectly, returns a blurry result on downscale.
I still have accounts on same hosting that is on old server with old Imagick. I use the same line:

Code: Select all

$image->resizeImage(133, 200, Imagick::FILTER_CUBIC, 0.5);
On old server it returns a good image. On new one it returns a blurry mess.
Image
The old server has ImageMagick 6.9.4-0 Q16 x86_64 2016-05-09
The new (problematic) server uses ImageMagick 7.0.5-4 Q16 x86_64 2017-04-12
I've reported this as issue to ImageMagick GitHub (https://github.com/ImageMagick/ImageMag ... -310741602), but one of their developers tested it for me, and said that it's not a problem with ImageMagick, but a problem with this IMagick interface most likely.

I'm willing to provide additional information, as I really need to get my non-blurry image generation ASAP and my hosting provider doesn't want to roll back the server update...

UPD:
Servers with this bug also have imagick: 3.4.3, while old ones have imagick: 3.1.2
So that means that imagick: 3.4.3 + ImageMagick 7.0.5-4 Q16 x86_64 2017-04-12 results in blurry images on downscale...

snibgo
Posts: 9478
Joined: 2010-01-23T23:01:33-07:00
Authentication code: 1151
Location: England, UK

Re: Images become blurry on downscale since I updated to v7

Post by snibgo » 2017-06-26T07:44:14-07:00

I downloaded your image, renamed it bluetop.jpg, and tried the following on IM v6.9.5-3 (on Windows 8.1):

Code: Select all

convert bluetop.jpg -resize "133x200^!" x.png

convert bluetop.jpg -filter cubic -resize "133x200^!" c.png
("!" gives an exact resize, instead of maintaining the aspect ratio.)

x.png is much sharper than c.png. c.png is mushy.

They look very much like your v6 and v7 results, respectively.

I'm not an expert at filters etc. Why are you using "-filter cubic"?

I conclude that your v7 version (or, more likely, IMagick) is respecting "-filter cubic", so you get the mushy result. Your v6 version ignores "-filter cubic" and uses the default filter, with the better result.

I suggest you omit "cubic". Does that look better?
snibgo's IM pages: im.snibgo.com

Trost
Posts: 3
Joined: 2017-06-26T06:25:51-07:00
Authentication code: 1151

Re: Images become blurry on downscale since I updated to v7

Post by Trost » 2017-06-26T08:47:32-07:00

snibgo wrote:
2017-06-26T07:44:14-07:00
I'm not an expert at filters etc. Why are you using "-filter cubic"?

I conclude that your v7 version (or, more likely, IMagick) is respecting "-filter cubic", so you get the mushy result. Your v6 version ignores "-filter cubic" and uses the default filter, with the better result.

I suggest you omit "cubic". Does that look better?
It's not like I chose to use -filter cubic. I use a CMS for an online shop, and that line of code is basically copy-pasted from the engine.
No idea why the developers of CMS chose to go with cubic filter, but it sure gave me a few days of headache to pinpoint the real cause of this blur.
Thank you so much! I changed it to

Code: Select all

$image->resizeImage(133, 200, 0, 0.5);
and it looks great now!

One more question - is inserting 0 instead of filter name the right way to omit it?

snibgo
Posts: 9478
Joined: 2010-01-23T23:01:33-07:00
Authentication code: 1151
Location: England, UK

Re: Images become blurry on downscale since I updated to v7

Post by snibgo » 2017-06-26T09:51:49-07:00

Sorry, I don't use IMagick so I don't know, but from http://php.net/manual/en/imagick.resizeimage.php and http://php.net/manual/en/imagick.consta ... ts.filters , "FILTER_UNDEFINED" may be what you want (and this constant may be zero, of course).

"Cubic" was pretty much state of the art about 20 years ago, so the code you see may have descended from those times.
snibgo's IM pages: im.snibgo.com

User avatar
fmw42
Posts: 22232
Joined: 2007-07-02T17:14:51-07:00
Location: Sunnyvale, California, USA

Re: Images become blurry on downscale since I updated to v7

Post by fmw42 » 2017-06-26T09:56:41-07:00

Cubic is a broad range of filters defined by constants b,c. See http://www.imagemagick.org/Usage/filter/#cubics. I believe b is the blurring constant. So using b=0.5 may be adding too much blur. What is called (Keys) cubic convolution (the old standard) is what ImageMagick calls filter=catrom. It produces sharp results at the expense of other artifacts. Lanczos is another good filter which IM uses as default it many cases.

snibgo
Posts: 9478
Joined: 2010-01-23T23:01:33-07:00
Authentication code: 1151
Location: England, UK

Re: Images become blurry on downscale since I updated to v7

Post by snibgo » 2017-06-26T10:24:39-07:00

fmw42 wrote:What is called cubic convolution ...
Ah, thanks, that's probably what I was trying to dig out of my rusty memory.
snibgo's IM pages: im.snibgo.com

Trost
Posts: 3
Joined: 2017-06-26T06:25:51-07:00
Authentication code: 1151

Re: Images become blurry on downscale since I updated to v7

Post by Trost » 2017-06-27T02:39:25-07:00

Looking here I can see that FILTER_CUBIC always results in a blurry output.
http://urmaul.com/blog/imagick-filters-comparison/
And changing the fourth parameter (blur factor) of resizeImage doesn't affect results in any way for me.
Anyways, I just used FILTER_UNDEFINED and this solved my problem.

Post Reply