Ruby on rails RMagick、Tempfile、回形针:如何将大尺寸、小kbs的图像文件保存为缩略图?
我有一个Rails rake任务,它正在处理一批图像。它去掉白色背景(使用RMagick),替换为透明层,将其写入tempfile,然后将其保存为AmazonS3上的PNG(使用回形针) 它适用于大部分图像。但是,至少有一个图像出现错误。有人能帮我弄清楚为什么以及如何修复它吗 代码示例:Ruby on rails RMagick、Tempfile、回形针:如何将大尺寸、小kbs的图像文件保存为缩略图?,ruby-on-rails,ruby,paperclip,rmagick,temporary-files,Ruby On Rails,Ruby,Paperclip,Rmagick,Temporary Files,我有一个Rails rake任务,它正在处理一批图像。它去掉白色背景(使用RMagick),替换为透明层,将其写入tempfile,然后将其保存为AmazonS3上的PNG(使用回形针) 它适用于大部分图像。但是,至少有一个图像出现错误。有人能帮我弄清楚为什么以及如何修复它吗 代码示例: require 'RMagick' require 'tempfile' include Magick task :task_name => :environment do x = Item.fi
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
错误消息:
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/Processing_image20130107-8640-1ck71i820130107-8640-i6p91w.png未被“标识”命令识别,图像透明C:/Users/Roger/AppData/Local/Temp/Processing_
image20130107-8640-1ck71i820130107-8640-i6p91w.png未被“标识”命令识别
此消息在运行最后一行(保存操作)时显示
小文件的临时文件问题?
我认为这个错误与Tempfile没有实际将文件写入temp路径有关。此错误可能与小文件大小有关?它遇到问题的特定图像通常有大量的空白,因此对于800x800像素的图像,处理后产生的文件大小约为30k
我怎样才能证实情况是否如此?如果是的话,我该如何应对呢
其他观察结果:
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
processedImage.write
之后,我检查了tempImageFile.size
。它说,它是30kb的预期processedImage.write
时显示。但是,对于故障图像,我看不到创建过临时文件因此,我认为现在的问题是,这是一个以字节(32kb)为单位的小文件,但高度和宽度(800x800)都不错。回形针正试图保存它的缩略版本,即90x90。通常情况下,这会生成一个文件大小,这可能有助于@Ahmad-抱歉,我一定是在你发布时更新了这个问题。我认为问题在于文件大小?(见更新相关段落)。