RMagick Image text question


#1

Hi there!
I’m studying RMagick graphics manipulation gem, and I need to put small
text about size 8 to 11 px on pictures. I found that text() method
prints quite blurred text. And I could not get clear text chosing
different values for methods font, font_family, font_style, font_weigth.

I attached a picture. In the left of it you can see what RMagick
generates for me and in the right you can see the example of clear text
I need RMagick to generate for me.

What can I do to get clear text. Any ideas?


#2

Zhan Tuaev wrote:

Hi there!
I’m studying RMagick graphics manipulation gem, and I need to put small
text about size 8 to 11 px on pictures. I found that text() method
prints quite blurred text. And I could not get clear text chosing
different values for methods font, font_family, font_style, font_weigth.

I attached a picture. In the left of it you can see what RMagick
generates for me and in the right you can see the example of clear text
I need RMagick to generate for me.

What can I do to get clear text. Any ideas?

Here is my code:

gc.stroke_width(1)
gc.pointsize(10)
gc.stroke(‘black’)
gc.font_style(Magick::NormalStyle)
gc.font_weight(Magick::LighterWeight)
gc.text(x,y, “12:00”)


#3

In my text drawing, I set stroke to transparent and fill to the
desired text color. Also, you could try turning off antialiasing. I
ended up using anti-aliasing, but rendering the text at double size
and scaling down for acceptable results.


#4

I tried to call / not to call methods fill() and stroke().
result is different in all cases:

gc.fill(‘black’) #results in:

#gc.fill(‘black’) # call is commented out
gc.stroke(‘black’) # results in:


#5

Zhoran T. wrote:

I tried to call / not to call methods fill() and stroke().
result is different in all cases:

gc.fill(‘black’) #results in:

#gc.fill(‘black’) # call is commented out
gc.stroke(‘black’) # results in:

gc.fill(‘black’)
gc.stroke(‘black’) # calling both results in:


#6

Jim wrote:

In my text drawing, I set stroke to transparent and fill to the
desired text color. Also, you could try turning off antialiasing. I
ended up using anti-aliasing, but rendering the text at double size
and scaling down for acceptable results.

Hi, Jim!
how can I turn off anti-aliasing?

I tried to call / not to call methods fill() and stroke().
result is different in all cases:

gc.fill(‘black’) #results in:


#7

Zhoran T. wrote:

Zhoran T. wrote:

I tried to call / not to call methods fill() and stroke().
result is different in all cases:

gc.fill(‘black’) #results in:

#gc.fill(‘black’) # call is commented out
gc.stroke(‘black’) # results in:

gc.fill(‘black’)
gc.stroke(‘black’) # calling both results in:

Сomparing these three pictures you can see, that calling both methods
stroke() and fill() makes best picture, but I still need better.
Something like at attached picture (I used pixel editor :slight_smile: to prepare
it)

And It seems to me that scaling down could not make accurate symbols.


#8

I would have something like:

gc.stroke(‘transparent’).stroke_antialias(false)
gc.fill(‘black’)

The stroke_width setting won’t have any effect on the text. I also
never saw any variation from using the font_style or font_weight
settings. I’m not sure if turning off antialiasing has any effect on
text, since I now have that commented out in my code. I still turn
off antialiasing when drawing lines because I only draw rectangles.
On an angled line you might need it.

The font you choose may also have something to do with it. Run

convert -list font

at the command line to see the available fonts and families on your
system.

Jim Crate
Que Viva Development


#9

Jim wrote:

I would have something like:

gc.stroke(‘transparent’).stroke_antialias(false)
gc.fill(‘black’)

The stroke_width setting won’t have any effect on the text. I also
never saw any variation from using the font_style or font_weight
settings. I’m not sure if turning off antialiasing has any effect on
text, since I now have that commented out in my code. I still turn
off antialiasing when drawing lines because I only draw rectangles.
On an angled line you might need it.

The font you choose may also have something to do with it. Run

convert -list font

at the command line to see the available fonts and families on your
system.

Jim Crate
Que Viva Development

Hi, Jim!
It really works!! I just turned off antialiasing and got it!!!
Please take a look at the pictures. That is what I needed.
Thank you for your help!


#10

Good luck, Jim :wink:


#11

hmm…I never noticed the text_antialias method before. I’ll have to
remember that the next time I run into issues.

Glad I could help!

Jim


#12

Zhoran T. wrote:

Hi, Jim!
It really works!! I just turned off antialiasing and got it!!!
Please take a look at the pictures. That is what I needed.
Thank you for your help!

One note more.
I’ve checked again and found that result defends on both callings
@gc.stroke(‘transparent’).stroke_antialias(false)
@gc.text_antialias = false

the best result (which I showed upper) produced by calling both methods.


#13

You can use this article on Image Manipulation to clear your query. This
article may prove to be of your help.

http://www.railscarma.com/blog/technical-articles/image-manipulation/