用RMagick做验证码图形,文字显示不出来

用RMagick做了一个显示验证吗的图
在windows下显示一切正常,上传到linux服务器上后,图片显示出来了,有背景颜色,可是就是没有文字
请指点迷津,不胜感激。

[quote][color=green][b]问题已经解决,后面说面了解决方法[/b][/color][/quote]

[code]
class NoisyImage
require 'RMagick'
include Magick

attr_reader :code, :code_image

def initialize(length = 4)
text_size = 33
rand_height = 9
colors = ['#FF0000', '#3300CC', '#FF3300', '#b50000', '#373000', '#f000f0', '##336600']
validbglinecolors = ['#ABEFAB', '#FF99FF', '#CCCCFF', '#66FF66', '#CCFF33']
validchars = (0..9).to_a
dist = (5..30).to_a
step = 8
chars = []
text_size_space = text_size * 0.8
text_size_step = text_size * 0.6
length.times {|x|
chars << validchars[rand(validchars.size).ceil - 1].to_s
}
bglinecolor = validbglinecolors[rand(validbglinecolors.size).ceil - 1]
image = Image.new(length * text_size_step + 10, text_size * 1.2, HatchFill.new('white', bglinecolor, dist[rand(dist.size - 1)]))
text = Draw.new
#使用字体文件和直接使用字体,或者不写font, font_family两个属性都是如图所示结果,linux下无字显示
text.font = "fonts/" + ['times.ttf', 'arial.ttf', 'verdana.ttf', 'artro.ttf'].sort{rand}.pop
#text.font_family = ['times', 'sans', 'fixed', 'Verdana'].sort{rand}.pop
text.font_weight = BoldWeight
text.text(0, 0, ' ')

chars.each {|char|
text.annotate(image, 0, 0, step, text_size_space + rand(rand_height), char) {
self.rotation = dist[rand(dist.size - 1).ceil]
self.fill = colors[rand(colors.size - 1).ceil]
self.pointsize = text_size - validchars[rand(rand_height).ceil]
}
step += text_size_step - rand(5)
}
text.draw(image)

@code = chars.to_s()
@code_image = image.to_blob{ self.format="JPG" }
end
end

[/code]

[quote]
原因是linux服务器下用的是fastcgi+apache,windows下测试用的是ruby webrick,而字体文件使用了相对路径,两者的路径是不同的,[color=green]使用[b]绝对路径[/b]就没有这个错误了[/color]。
误: text.font = "fonts/" + ['times.ttf', 'arial.ttf', 'verdana.ttf', 'artro.ttf'].sort{rand}.pop
正: text.font = "/home/web/fonts/" + ['times.ttf', 'arial.ttf', 'verdana.ttf', 'artro.ttf'].sort{rand}.pop
[/quote]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值