字符串 blob 中的批处理 jpg 图像未全部写入文件 ruby file open write barby gem rmagick
batch jpg images in string blob not all written to file with ruby file open write barby gem rmagick
我正在使用 barby gem 生成条形码。我一次做一批,然后将它们全部保存在一个文件中,以供用户查看。我不想一次打印一个。
def generate_barcode
number_of_instances = params[:times].to_i
value = 12.times.map{rand(10)}.join
barcodes = 10.times.collect { Barby::EAN13.new(value) } #collects ten barcodes in an array
processed_barcodes = barcodes.map {|barcode| barcode.to_jpg_2(:height => 60)} #returns an array and each element is a string of jpeg file
File.open('code.jpg', 'wb') do |f|
processed_barcodes.each {|barcode| f.write(barcode)} #stuck here
#f.puts(processed_barcodes) #tried this
end
send_file('code.jpg',
:type => 'image/jpeg',
:disposition => 'inline'
)
end
风景
<%= image_tag(url_for({:controller => 'business_partners', :action => 'generate_barcode', :format => 'jpg' })) %>
processed_barcodes.count
回来了 10。
我的 code.jpg 已处理,但我只有 1 张图像。
jpg 字符串 blob 格式的每张图片如下所示
>> processed_barcodes.first
=> "\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xFF\xDB\x00C\x00\x03\x02\x02\x02\x02\x02\x03\x02\x02\x02\x03\x03\x03\x03\x04\x06\x04\x04\x04\x04\x04\b\x06\x06\x05\x06\t\b\n\n\t\b\t\t\n\f\x0F\f\n\v\x0E\v\t\t\r\x11\r\x0E\x0F\x10\x10\x11\x10\n\f\x12\x13\x12\x10\x13\x0F\x10\x10\x10\xFF\xC0\x00\v\b\x00P\x00s\x01\x01\x11\x00\xFF\xC4\x00\e\x00\x01\x01\x01\x01\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\a\b\x06\x05\x02\x03\t\xFF\xC4\x009\x10\x00\x00\x05\x03\x01\x05\x05\x03\f\x03\x01\x00\x00\x00\x00\x00\x01\x02\x03\x04\x06\x00\x05\a\b\x11\x12\x13\x14w\"79\xB6\xB7\x158\x87\t\x16\x18!#3FI\x85\xB5\xC4\xC5\x17$B%\xFF\xDA\x00\b\x01\x01\x00\x00?\x00\xFDS\xA5)JR\x94\xA5)JR\x95\x8F\xF2\xA6{\xCB\x11\xB9\xA6q\xB4\xD9e|\xBBH|>mt\xB2\xA7\xC8\xB6?*\xE9\x85\x82&\xED\xA2\x9BL\x98\x89\xF7\x17\xBA\xBF>\xC3\x89\x8An>\xC3\x01\x8AB\x01h\x1A`\xCAS\xBC\x89\xECo\x9E7\xDFhsx~\x01)[\xFDTR\xDE\xBA\\xBD\xAB\xCE\xAF\xF6d.\xCE'*\x87`;\x05\xDC\xEC\x14\xBBM\xB6\x7F\xA4\xAC\xF7\x962l\xD25i\x9CJ\xFD\xA4\xD2\xE1\x0FR\xE8\xE1>E\xB2;\xEE\x82\xC1\tv\nmI2\x88}\xBD\xEA\xE6}\x80 _\xF66l\xDDM0$\x02\xC1\xAC\xCDI\xBD\x85\xE8\xAA\xEC\xEB$o\xBB\xCBs\v\xAD\xAEb\xA7\xB1\xD8\a\xB4\xDA\xA3\x7Fl\xD14\xF6\x02\e\x11\xD8\x82\x87&\xD4@\x86\x1D\xBBDD\xC0\x03W\xFCi\x9E\xF2\xC4\x83G9c*\xDD\xE5|\xC4\xA63\x0Fmt\xB5\xBF\xE4[\x13\x97tx5\xA6\xE8e8eL\x13>\xD7\xAE\xDC+\xB0\xC5\x12\xF6\xF76n\x14\xA5\b\x064\xD6f\xA4\xE4\x1A\xC6\xCB\x18\xAA\xEF\x929\x88\xB4f`\xDA\xD7ka\xECv\x04\xE5\xDA\x9Esi\xB5\x99>!P\x05\x0F\xB5\x93\xB7\tm1\x84\xDD\xBD\xFD\xBB\xE5)\x82\xFF\x00\xA4\xAC\xF7\x962l\xD25i\x9CJ\xFD\xA4\xD2\xE1\x0FR\xE8\xE1>E\xB2;\xEE\x82\xC1\tv\nmI2\x88}\xBD\xEA\xE6}\x80 _\xF66l\xDDM0\"!\x9E\xF2\xC5\xD2\x17\x15\xBB>\x95\xF1]\xDC\xA1\xF8R\xE8\xE9NE\xB1x\x8E\xAF\xD7\xF5\x9A]\x94\xD8\t\x80\a\x1D\x02\x14\x9B\x00\x00\xA9\xEC\xDA\x98\x10\xDF]p\x1A\x90\xD5\x1Ev\x81}1>i\xCEy\x1F\xF1_\xF8\xFB\xE6\x97\xFEc5}\x9B\xED>\x0F;\xF7\x89\e\x8D\xC4\xDF7\xDE\xEF\xEE\xED\xECn\xD25\xAA<\xEDp\xD7\xD68\xC2\x8E\xE7<He\xFB\xE7\xAF\xB4-\x9E\xCCf\x1CnB\xF5&l\xD3\xED\x81.)w\x11\xB6\xB2/d\xE1\xBD\xC1\xDAm\xE19\xC4\xDD\xFEK\xCFyb?\xA3\x9CO\x95m\x12\xBE^S&\x87\xB9\xBA]\x1F\xF2-\x8F\xCC:$\x1A\xEDt*\x9C3&)\x93c\xD6\x8D\xD5\xD8R\x81{\e\x9B7\fb\x8F\x01\x85uG\x9D\xA5\xB8_\x01K\x9En\xEB5\xE7=\xBA\xE3\xD9\x8C\xD3\xE6\xF8s\xE8\xFD\xA8\x9D\x92$\x05Oc\x17\xEE\xD1\xEC\x01~\xF7|{e!\xCB\xAF\xF4\xF5)\xBE\xCEp\x164\x9A\xCA_s\xB7\xA9\x04>\xCDt\xB8\xB9\xE1\x11>;\xA5\xD9$\xA2\xAAn\x10\nB\xEF\x1C\xE6\x1D\x85\x00(m\xD8\x00\x01\xF5U\x02\x95\x803\x87x\xBA\x97\xE9\xFEH\xF2\xAC\x16\xAA\xBA+\xFC=\xD0\fY\xFD\xE5J\xB4\e\xDE,;\xA7\xEA\xF9W\e\xD6U\x8Bwu\xF2qu\x02\xF9\xE6\xA6u\xAA\xB0\xDF\x87\xBEv\xE9\xFB?L\xEC5\x95p\xDF\x88Fv\xEA\x03?S,5\xAA\xB4\e\xDE,;\xA7\xEA\xF9W\e\xD2\x03\xDD\xD4\e\xA7\xFAq\xF3S\x8A\x95j\xFF\x00\xF3\x05\xF8Q\xFCzC|Sq\x0F\xC4\x7F1\xCC\xAA\xAB\x99<=\xF0OO\xDEzg~\xA9V\x9C}\xDDt\xB1\xFA\x8F\xAAqZ\xDF\xFAN\xF7X\xC3}?\x8F~\xDC\x85UiX\x038w\x8B\xA9~\x9F\xE4\x8F*\xC1j\xAB\xA2\xBF\xC3\xDD\x00\xC5\x9F\xDET\xABA\xBD\xE2\xC3\xBA~\xAF\x95q\xBDeX\xB7w_'\x17P/\x9EjgZ\xAB\r\xF8{\xE7n\x9F\xB3\xF4\xCE\xC3YW\r\xF8\x84gn\xA03\xF52\xC3Z\xABA\xBD\xE2\xC3\xBA~\xAF\x95q\xBD =\xDDA\xBA\x7F\xA7\x1F58\xA9V\xAF\xFF\x000_\x85\x1F\xC7\xA47\xC57\x10\xFCG\xF3\x1C\xCA\xAA\xB9\x93\xC3\xDF\x04\xF4\xFD\xE7\xA6w\xEA\x95i\xC7\xDD\xD7K\x1F\xA8\xFA\xA7\x15\xAD\xFF\x00\xA4\xEFu\x8C7\xD3\xF8\xF7\xED\xC8UV\x95\x803\x87x\xBA\x97\xE9\xFEH\xF2\xAC\x16\xAA\xBA+\xFC=\xD0\fY\xFD\xE5J\xB4\e\xDE,;\xA7\xEA\xF9W\e\xD6U\x8Bwu\xF2qu\x02\xF9\xE6\xA6u\xAA\xB0\xDF\x87\xBEv\xE9\xFB?L\xEC5\x95p\xDF\x88Fv\xEA\x03?S,5\xAA\xB4\e\xDE,;\xA7\xEA\xF9W\e\xD2\x03\xDD\xD4\e\xA7\xFAq\xF3S\x8A\x95j\xFF\x00\xF3\x05\xF8Q\xFCzC|Sq\x0F\xC4\x7F1\xCC\xAA\xAB\x99<=\xF0OO\xDEzg~\xA9V\x9C}\xDDt\xB1\xFA\x8F\xAAqZ\xDF\xFAN\xF7X\xC3}?
您使用 File.open('code.jpg', 'wb')
打开一个文件并向其中写入 processed_barcodes
次。如果你想要 processed_barcodes
个文件,那么你需要使用唯一的名称循环 File.open
。
而不是:
File.open('code.jpg', 'wb') do |f|
processed_barcodes.each {|barcode| f.write(barcode)} #stuck here
#f.puts(processed_barcodes) #tried this
end
使用这个未经测试的代码:
processed_barcodes.each_with_index do |barcode, i|
File.open("code_#{i + 1}.jpg", 'wb') do |f|
f.write(barcode)
end
end
您需要了解如何修改:
send_file('code.jpg',
:type => 'image/jpeg',
:disposition => 'inline'
)
我正在使用 barby gem 生成条形码。我一次做一批,然后将它们全部保存在一个文件中,以供用户查看。我不想一次打印一个。
def generate_barcode
number_of_instances = params[:times].to_i
value = 12.times.map{rand(10)}.join
barcodes = 10.times.collect { Barby::EAN13.new(value) } #collects ten barcodes in an array
processed_barcodes = barcodes.map {|barcode| barcode.to_jpg_2(:height => 60)} #returns an array and each element is a string of jpeg file
File.open('code.jpg', 'wb') do |f|
processed_barcodes.each {|barcode| f.write(barcode)} #stuck here
#f.puts(processed_barcodes) #tried this
end
send_file('code.jpg',
:type => 'image/jpeg',
:disposition => 'inline'
)
end
风景
<%= image_tag(url_for({:controller => 'business_partners', :action => 'generate_barcode', :format => 'jpg' })) %>
processed_barcodes.count
回来了 10。
我的 code.jpg 已处理,但我只有 1 张图像。
jpg 字符串 blob 格式的每张图片如下所示
>> processed_barcodes.first
=> "\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xFF\xDB\x00C\x00\x03\x02\x02\x02\x02\x02\x03\x02\x02\x02\x03\x03\x03\x03\x04\x06\x04\x04\x04\x04\x04\b\x06\x06\x05\x06\t\b\n\n\t\b\t\t\n\f\x0F\f\n\v\x0E\v\t\t\r\x11\r\x0E\x0F\x10\x10\x11\x10\n\f\x12\x13\x12\x10\x13\x0F\x10\x10\x10\xFF\xC0\x00\v\b\x00P\x00s\x01\x01\x11\x00\xFF\xC4\x00\e\x00\x01\x01\x01\x01\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\a\b\x06\x05\x02\x03\t\xFF\xC4\x009\x10\x00\x00\x05\x03\x01\x05\x05\x03\f\x03\x01\x00\x00\x00\x00\x00\x01\x02\x03\x04\x06\x00\x05\a\b\x11\x12\x13\x14w\"79\xB6\xB7\x158\x87\t\x16\x18!#3FI\x85\xB5\xC4\xC5\x17$B%\xFF\xDA\x00\b\x01\x01\x00\x00?\x00\xFDS\xA5)JR\x94\xA5)JR\x95\x8F\xF2\xA6{\xCB\x11\xB9\xA6q\xB4\xD9e|\xBBH|>mt\xB2\xA7\xC8\xB6?*\xE9\x85\x82&\xED\xA2\x9BL\x98\x89\xF7\x17\xBA\xBF>\xC3\x89\x8An>\xC3\x01\x8AB\x01h\x1A`\xCAS\xBC\x89\xECo\x9E7\xDFhsx~\x01)[\xFDTR\xDE\xBA\\xBD\xAB\xCE\xAF\xF6d.\xCE'*\x87`;\x05\xDC\xEC\x14\xBBM\xB6\x7F\xA4\xAC\xF7\x962l\xD25i\x9CJ\xFD\xA4\xD2\xE1\x0FR\xE8\xE1>E\xB2;\xEE\x82\xC1\tv\nmI2\x88}\xBD\xEA\xE6}\x80 _\xF66l\xDDM0$\x02\xC1\xAC\xCDI\xBD\x85\xE8\xAA\xEC\xEB$o\xBB\xCBs\v\xAD\xAEb\xA7\xB1\xD8\a\xB4\xDA\xA3\x7Fl\xD14\xF6\x02\e\x11\xD8\x82\x87&\xD4@\x86\x1D\xBBDD\xC0\x03W\xFCi\x9E\xF2\xC4\x83G9c*\xDD\xE5|\xC4\xA63\x0Fmt\xB5\xBF\xE4[\x13\x97tx5\xA6\xE8e8eL\x13>\xD7\xAE\xDC+\xB0\xC5\x12\xF6\xF76n\x14\xA5\b\x064\xD6f\xA4\xE4\x1A\xC6\xCB\x18\xAA\xEF\x929\x88\xB4f`\xDA\xD7ka\xECv\x04\xE5\xDA\x9Esi\xB5\x99>!P\x05\x0F\xB5\x93\xB7\tm1\x84\xDD\xBD\xFD\xBB\xE5)\x82\xFF\x00\xA4\xAC\xF7\x962l\xD25i\x9CJ\xFD\xA4\xD2\xE1\x0FR\xE8\xE1>E\xB2;\xEE\x82\xC1\tv\nmI2\x88}\xBD\xEA\xE6}\x80 _\xF66l\xDDM0\"!\x9E\xF2\xC5\xD2\x17\x15\xBB>\x95\xF1]\xDC\xA1\xF8R\xE8\xE9NE\xB1x\x8E\xAF\xD7\xF5\x9A]\x94\xD8\t\x80\a\x1D\x02\x14\x9B\x00\x00\xA9\xEC\xDA\x98\x10\xDF]p\x1A\x90\xD5\x1Ev\x81}1>i\xCEy\x1F\xF1_\xF8\xFB\xE6\x97\xFEc5}\x9B\xED>\x0F;\xF7\x89\e\x8D\xC4\xDF7\xDE\xEF\xEE\xED\xECn\xD25\xAA<\xEDp\xD7\xD68\xC2\x8E\xE7<He\xFB\xE7\xAF\xB4-\x9E\xCCf\x1CnB\xF5&l\xD3\xED\x81.)w\x11\xB6\xB2/d\xE1\xBD\xC1\xDAm\xE19\xC4\xDD\xFEK\xCFyb?\xA3\x9CO\x95m\x12\xBE^S&\x87\xB9\xBA]\x1F\xF2-\x8F\xCC:$\x1A\xEDt*\x9C3&)\x93c\xD6\x8D\xD5\xD8R\x81{\e\x9B7\fb\x8F\x01\x85uG\x9D\xA5\xB8_\x01K\x9En\xEB5\xE7=\xBA\xE3\xD9\x8C\xD3\xE6\xF8s\xE8\xFD\xA8\x9D\x92$\x05Oc\x17\xEE\xD1\xEC\x01~\xF7|{e!\xCB\xAF\xF4\xF5)\xBE\xCEp\x164\x9A\xCA_s\xB7\xA9\x04>\xCDt\xB8\xB9\xE1\x11>;\xA5\xD9$\xA2\xAAn\x10\nB\xEF\x1C\xE6\x1D\x85\x00(m\xD8\x00\x01\xF5U\x02\x95\x803\x87x\xBA\x97\xE9\xFEH\xF2\xAC\x16\xAA\xBA+\xFC=\xD0\fY\xFD\xE5J\xB4\e\xDE,;\xA7\xEA\xF9W\e\xD6U\x8Bwu\xF2qu\x02\xF9\xE6\xA6u\xAA\xB0\xDF\x87\xBEv\xE9\xFB?L\xEC5\x95p\xDF\x88Fv\xEA\x03?S,5\xAA\xB4\e\xDE,;\xA7\xEA\xF9W\e\xD2\x03\xDD\xD4\e\xA7\xFAq\xF3S\x8A\x95j\xFF\x00\xF3\x05\xF8Q\xFCzC|Sq\x0F\xC4\x7F1\xCC\xAA\xAB\x99<=\xF0OO\xDEzg~\xA9V\x9C}\xDDt\xB1\xFA\x8F\xAAqZ\xDF\xFAN\xF7X\xC3}?\x8F~\xDC\x85UiX\x038w\x8B\xA9~\x9F\xE4\x8F*\xC1j\xAB\xA2\xBF\xC3\xDD\x00\xC5\x9F\xDET\xABA\xBD\xE2\xC3\xBA~\xAF\x95q\xBDeX\xB7w_'\x17P/\x9EjgZ\xAB\r\xF8{\xE7n\x9F\xB3\xF4\xCE\xC3YW\r\xF8\x84gn\xA03\xF52\xC3Z\xABA\xBD\xE2\xC3\xBA~\xAF\x95q\xBD =\xDDA\xBA\x7F\xA7\x1F58\xA9V\xAF\xFF\x000_\x85\x1F\xC7\xA47\xC57\x10\xFCG\xF3\x1C\xCA\xAA\xB9\x93\xC3\xDF\x04\xF4\xFD\xE7\xA6w\xEA\x95i\xC7\xDD\xD7K\x1F\xA8\xFA\xA7\x15\xAD\xFF\x00\xA4\xEFu\x8C7\xD3\xF8\xF7\xED\xC8UV\x95\x803\x87x\xBA\x97\xE9\xFEH\xF2\xAC\x16\xAA\xBA+\xFC=\xD0\fY\xFD\xE5J\xB4\e\xDE,;\xA7\xEA\xF9W\e\xD6U\x8Bwu\xF2qu\x02\xF9\xE6\xA6u\xAA\xB0\xDF\x87\xBEv\xE9\xFB?L\xEC5\x95p\xDF\x88Fv\xEA\x03?S,5\xAA\xB4\e\xDE,;\xA7\xEA\xF9W\e\xD2\x03\xDD\xD4\e\xA7\xFAq\xF3S\x8A\x95j\xFF\x00\xF3\x05\xF8Q\xFCzC|Sq\x0F\xC4\x7F1\xCC\xAA\xAB\x99<=\xF0OO\xDEzg~\xA9V\x9C}\xDDt\xB1\xFA\x8F\xAAqZ\xDF\xFAN\xF7X\xC3}?
您使用 File.open('code.jpg', 'wb')
打开一个文件并向其中写入 processed_barcodes
次。如果你想要 processed_barcodes
个文件,那么你需要使用唯一的名称循环 File.open
。
而不是:
File.open('code.jpg', 'wb') do |f|
processed_barcodes.each {|barcode| f.write(barcode)} #stuck here
#f.puts(processed_barcodes) #tried this
end
使用这个未经测试的代码:
processed_barcodes.each_with_index do |barcode, i|
File.open("code_#{i + 1}.jpg", 'wb') do |f|
f.write(barcode)
end
end
您需要了解如何修改:
send_file('code.jpg',
:type => 'image/jpeg',
:disposition => 'inline'
)