嗯,其实这个的起因是新浪微博只能贴一张图片。然后又有很多人整合了贴上去,所以我也想试试:P
直接用RMagick应该是可以直接做的,但是考虑到RMagick的方法太过复杂,所以使用了这么个组合方式。其实RMagick就是ImageMagick的ruby实现罢了。
言归正传:非常简单的代码,不过俺还是写了好久,Ruby的方法还是不熟悉呃,每次写都需要看RubyDoc。。。
使用方法:把脚本扔到一堆图片(支持jpg,png,gif)的文件夹里面,双击运行,搞定;或者在脚本后面加需要处理的图片的路径。最后会生成一个result.jpg文件。
TODO:
- 考虑是否需要按图片尺寸来从小到大排列;如果图片太大就转换所有图片到差不多尺寸,然后从小到大排列……
- 用RMagick重写该脚本
- 既然是TO-DO,就看以后有心情弄不了
require 'pathname'
dir=nil
file_str=""
def usage
puts "Usage: #{__FILE__} [path_with_image_files]"
puts "Example 1: #{__FILE__}"
puts "Example 2: #{__FILE__} D:\\funimg"
end
if ARGV.length ==0
dir= Pathname.new(File.dirname(__FILE__)).realpath
Dir.chdir(dir)
elsif ARGV.length ==1
dir=ARGV.first
begin
Dir.chdir dir
rescue Errno::ENOENT
puts "Cannot find the directory you specified!"
usage
exit 1
end
else
usage
exit 1
end
Dir.glob("*.{jpeg,jpg,png,gif}") do |fn|
basename=fn.split('.')[0]
extname= File.extname(fn)
if extname != 'png'
`convert #{fn} -quality 100 #{basename}.png`
File.delete(fn)
end
file_str << "#{basename}.png "
end
#start to append all images
`convert #{file_str} -gravity Center -quality 80 -append result.jpg`
Update: 其实用ImageMagick的montage命令更好用:
`montage #{file_str} -auto-orient -bordercolor Lavender -background black +polaroid -tile 1x -gravity center -background SkyBlue -geometry "1x1<" #{result_img}`
或者
`montage #{file_str} -tile 1x -geometry "1x1<" #{result_img}`
都不错。可以自己试试效果。第一个是相册风格的,第二个是直接拼接的。