Jpg to Png Using Rmagick

JPG to PNG using RMagick

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)

Image conversion to PNG vs JPG using ImageMagick

I have absolutely no time to develop this line of thought further but the image entropy is probably a good discriminant for selecting JPEG or PNG - see my earlier comment on your question.

If you use ImageMagick, you can calculate the Entropy easily like this:

identify -verbose -features 1 image.jpg | grep -i -A1 entropy

Your top image gives output like this:

identify -verbose -features 1 t.jpg | grep -i -A1 entropy
Sum Entropy:
0.703064, 0.723437, 0.733147, 0.733015, 0.723166
Entropy:
1.01034, 1.12974, 1.14983, 1.15122, 1.11028
Difference Entropy:
0.433414, 0.647495, 0.665738, 0.671079, 0.604431

and your bottom image gives output like this:

identify -verbose -features 1 b.jpg | grep -i -A1 entropy
Sum Entropy:
1.60934, 1.62512, 1.65567, 1.65315, 1.63582
Entropy:
2.19687, 2.33206, 2.44111, 2.43816, 2.35205
Difference Entropy:
0.737134, 0.879926, 0.980157, 0.979763, 0.894245

I suspect images with a higher entropy will compress better as JPEGs and those with a lower entropy will fare better as PNGs - but I have to dash now :-)

There are 5 values for each type of entropy - horizontal, vertical, left diag, right diag and overall. I think the last value is the only one you need consider.

Updated

Ok, I have had a little more time to spend on this now. I do not have a pile of sample images to test my theory on, so I did it a different way. I made a little script to calculate the following for a given input file:

  • ratio of JPEG size to PNG size
  • entropy

Here it is:

#!/bin/bash
f="$1"
jsize=$(convert "$f" -strip JPG:- | wc -c)
psize=$(convert "$f" PNG:- | wc -c)
jpratio=$(echo $jsize*100/$psize | bc)
# Make greyscale version for entropy calculation
rm temp*.jpg 2> /dev/null
convert "$f" -colorspace gray temp.jpg
entropy=$(identify -verbose -features 1 temp.jpg | grep -A1 " Entropy:" | tail -n 1 | awk -F, '{print $5}')
echo $jpratio:$entropy

So, for a given image, you would do this:

./go image.jpg
8:3.3 # JPEG is 8x bigger than PNG and entropy is 3.3

Then I took your image and added different amounts of noise to it to increase its entropy, like this

for i in {1..99}; do convert bottom.jpg +noise Gaussian -evaluate add ${i}% xx${i}.jpg;done

that gives me files called xx1.jpg with 1% noise, xx2.jpg with 2% noise and so on, up to xx99.jpg with 99% noise.

Then I ran each of the files through the first script, like this:

for f in xx*.jpg; do ./go $f;done > data.txt

to give me data.txt.

Then I created the following gnuplot command file plot.cmd:

set title 'Plotted with Gnuplot'
set ylabel 'Entropy'
set xlabel 'JPEG size/PNG Size'
set grid
set terminal postscript color landscape dashed enhanced 'Times-Roman'
set output 'file.eps'
plot 'data.txt'

and ran it with

gnuplot plot.cmd

And I got the following plot which shows that as ImageMagick's entropy number increases, the ratio of JPEG size to PNG size improves in favour of JPEG... not very scientific, but something at least. Maybe you could run the script against the type of images you normally use and see what you get.
Sample Image

rmagick is there a way to convert image in memory

# assuming you have an image
# img = Magick::Image.new( 100, 100 )
img = Magick::Image.from_blob( img.to_blob { self.format = "png" } )

Source: RMagick Docs

Here's an example on how to give it to the user

image.format = "png"
send_data image.to_blob,
:filename => "woohoo.png",
:disposition => 'inline',
:quality => 90,
:type => 'image/png'

rmagick compress and convert png to jpg

The use of '.png' extension will change the format back to PNG on the call to write.

There are two possible solutions.

First, I'd recommend using the normal file extension for your format if possible, because a lot of computer systems will rely on that:

i = Image.read( 'demo.png' ).first
i.format = 'JPEG'
i.write( 'demo_compressed.jpg' ) { |image| image.quality = 10 }

If this is not possible, you can set the format inside the block passed to write, and this will apply the format after the extension has been processed:

i = Image.read( 'demo.png' ).first
i.write( 'demo_compressed.png' ) do |image|
image.format = 'JPEG'
image.quality = 10
end

In both the above cases, I get the expected high compression (and low quality) jpeg format image.


This has been updated due to recent RMagick changes (thanks to titan for posting comment). The orginal code snippets were

i.write( 'demo_compressed.jpg' ) { self.quality = 10 }

and

i.write( 'demo_compressed.png' ) do
self.format = 'JPEG'
self.quality = 10
end

These may still work in older RMagick installations.

Base64 jpg to base64 Png in Ruby

In ImageMagick, this works for me.

Create JPG base 64 file:

convert rose: rose.jpg

Sample Image

convert rose.jpg inline:rose_base64jpg

The text file rose_base64jpg shows:

data:image/jpeg;base64,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


Convert from base 64 JPG to base 64 PNG:

cat rose_base64jpg | convert inline:- PNG:- | convert - inline:rose_base64png

The text file rose_base64png show:

data:image/png;base64,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

Rails: SVG to PNG using imagemagick/RMagick

Issue was in the path for the images while replacing relative path to absolute path.

Just corrected path for the images in above SVG. ImageMagick was able to find images embedded in SVG and Final image is created.

ImageMagick requires absolute directory and file path to file or image, if its embedded in SVG stream.

Thanks!!
Keep Rocking!!

Converting SVG to PNG with RMagick in memory

The RMagick doc for from_blob says that from_blob returns an array of images, so my guess is that this should work:

arr = Magick::Image.from_blob(str)
str = arr[0].to_blob


Related Topics



Leave a reply



Submit