Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何停止Ruby中的ImageMagick(Rmagick)评估@sign-in文本注释_Ruby_Rmagick - Fatal编程技术网

如何停止Ruby中的ImageMagick(Rmagick)评估@sign-in文本注释

如何停止Ruby中的ImageMagick(Rmagick)评估@sign-in文本注释,ruby,rmagick,Ruby,Rmagick,在我最近为客户端构建的一个应用程序中,以下代码导致对变量@nameText进行求值,然后导致错误“无文本”(因为该变量不存在) 为了解决这个问题,我使用了gsub,如下例所示。有没有办法告诉Magick不要对字符串求值 require 'RMagick' @image = Magick::Image.read( '/path/to/image.jpg' ).first @nameText = '@SomeTwitterUser' @text = Magick::Draw.new @text.f

在我最近为客户端构建的一个应用程序中,以下代码导致对变量
@nameText
进行求值,然后导致错误“无文本”(因为该变量不存在)

为了解决这个问题,我使用了gsub,如下例所示。有没有办法告诉Magick不要对字符串求值

require 'RMagick'

@image = Magick::Image.read( '/path/to/image.jpg' ).first
@nameText = '@SomeTwitterUser'
@text = Magick::Draw.new
@text.font_family = 'Futura'
@text.pointsize = 22
@text.font_weight = Magick::BoldWeight

# Causes error 'no text'...
# @text.annotate( @image, 0,0,200,54, @nameText )

@text.annotate( @image, 0,0,200,54, @nameText.gsub('@', '\@') )

这是RMagick返回错误的C代码:

//转换并存储在绘图结构中
绘图->信息->文本=解释图像属性(NULL、图像、StringValuePtr(文本));
如果(!绘图->信息->文本)
{
rb_raise(rb_eArgError,“无文本”);
}
正是对
interpretatimageproperties
的调用修改了输入文本,但它不是Ruby,也不是试图引用的Ruby实例变量。此函数在Image Magick core库中定义:

再往下看一点,您可以看到代码:

/*处理文件中的“@”替换字符串*/
如果(*p=='@')){
p++;
if(*p!='-'&&(IsPathAccessible(p)=MagickFalse)){
(void)ThrowMagickException(&image->exception,GetMagickModule(),
选项错误,“无法访问路径”,“%s”,p);
返回((char*)NULL);
}
返回(FileToString(p,~0,&image->exception));
}
总之,这是一个核心库功能,它将尝试从文件中加载文本(名为
SomeTwitterUser
,在您的情况下,我已经确认了这一点-尝试一下!),您的工作可能是您所能做的最好的

为了提高效率,并尽量减少对输入字符串的更改,您可以依赖库代码的选择性,仅当字符串以
@
开头时才修改字符串:

@text.annotate(@image,0,0200,54,@name\u string.gsub(/^@/,'\@'))

您想对字符串中的变量做什么?@nameText变量实际上是用户发送的参数。他们创建了一个广告牌图像,上面有他们的twitter个人资料图片和twitter名称。我想你想要这个
“#{@SomeTwitterUser}”
,顺便说一句,你违反了Ruby命名约定。它们应该是
@name\u text
@twitter\u用户
@screenmut,我想你没有抓住重点
@SomeTwitterUser
是Twitter用户名。。。不是一个实例变量。我想你可能犯了和Rmagick一样的错误谢谢尼尔,这太奇怪了,我不得不和大家分享。