Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPG to PNG using RMagick

I'm trying to convert a fetched image from JPG to PNG using RMagick, resize it and then store it on S3:

thumb = Magick::Image.read("artist.jpg").first
thumb.write("artist.png")
thumb.crop_resized!(120, 120, Magick::CenterGravity)

AWS::S3::S3Object.store("image.png", thumb.to_blob, AWS_BUCKET, :content_type => 'image/png', :access => :public_read)

The image does get saved as a png but when I open it in Preview, document type still says "JPEG image". In fact, the image won't even open in Photoshop unless I change the extension back to ".jpg". Am I missing something?

like image 881
samvermette Avatar asked Jun 21 '11 01:06

samvermette


2 Answers

Try explicitly setting the format:

thumb = Magick::Image.read("artist.jpg").first
thumb.format = "PNG"
thumb.write("artist.png")
thumb.crop_resized!(120, 120, Magick::CenterGravity)

AWS::S3::S3Object.store("image.png", thumb.to_blob, AWS_BUCKET, :content_type => 'image/png', :access => :public_read)
like image 150
Tom Mango Avatar answered Sep 22 '22 01:09

Tom Mango


For me, doing thumb.format = "PNG" didn't work, however doing thumb.format('png') does work. Most likely due to changes in the past few years.

thumb = Magick::Image.read("artist.jpg").first
thumb.format("png")
thumb.crop_resized!(120, 120, Magick::CenterGravity)
AWS::S3::S3Object.store("image.png", thumb.to_blob, AWS_BUCKET, :content_type => 'image/png', :access => :public_read)

Hope that helps.

like image 41
Todd Nestor Avatar answered Sep 22 '22 01:09

Todd Nestor