我有一个处理一批图像的Rails rake任务。它剥离了白色背景(使用RMagick),将其替换为透明层,将其写入临时文件,然后将其作为PNG保存在Amazon S3上(使用Paperclip)。
适用于大部分图像。但是,它至少会出现1个图像的错误。有人可以帮我弄清楚为什么以及如何解决它?
代码示例:
require 'RMagick'
require 'tempfile'
include Magick
task :task_name => :environment do
x = Item.find(128) # image 128 is the one giving me trouble
sourceImage = Image.read(x.image_link_hires)
processedImage = sourceImage[0].transparent("white")
tempImageFile = Tempfile.new(["processed_image",".png"])
processedImage.write("png:" + tempImageFile.path)
x.image_transparent = tempImageFile
x.save!
end
错误消息:
耙子流产了!验证失败:图像透明C:/Users/Roger/AppData/Local/Temp/processed_image20130107-8640-1ck71i820130107-8640-i6p91w.png无法通过'identify'命令识别。,Image transparent C:/ Users / Roger / AppData /本地/温度/ processed_ “识别”命令无法识别image20130107-8640-1ck71i820130107-8640-i6p91w.png。
运行最后一行(保存操作)时会出现此消息。
小文件的Tempfile问题?
我认为错误与Tempfile有关,实际上并没有将文件写入临时路径。此错误可能与小文件大小有关?它遇到问题的特定图像通常具有白色空间,因此处理后的文件大小对于800x800像素图像大约为30k。
我如何验证是否是这种情况?如果是的话,我该如何解决呢?
其他观察结果:
processedImage.write
之后,我检查了tempImageFile.size
。据说这是预期的30kb。processedImage.write
运行时,文件似乎显示出来。但是,对于故障图像,我没有看到创建临时文件。感谢您的任何建议。
2013年1月7日更新
我对此进行了更多调查。我重申上面的#1,但试图用Paperclip保存到S3。这会生成相同的错误消息。
所以现在我认为问题是这是一个字节(32kb)的小文件,但有一个不错的高度和宽度(800x800)。 Paperclip正在尝试保存它的缩略图版本,即90x90。通常,这会生成一个<原始的1%的文件大小,我认为这是错误的来源。
如果有人有一个优雅的解决方法/解决方案,我会很感激听到它。