Page 266 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼ImageMagick kojima 17/1/18(水) 20:47 ┗Re:ImageMagick マチャプチャレ 17/1/20(金) 6:51 ─────────────────────────────────────── ■題名 : ImageMagick ■名前 : kojima ■日付 : 17/1/18(水) 20:47 -------------------------------------------------------------------------
ImageMagickという、非常に便利な画像処理ツールを知りました。 imagemagick日本語マニュアル http://imagemagick.rulez.jp/archives/15 コマンドラインの1行記述で画像フォーマットの変換が簡単にできることに驚きました。 今まで知らなかったのが、非常に勿体ない思いです。 以下、JWWで編集された画像の文字情報で、元画像を加工した新画像の作成・表示。 元画像と編集画像を横結合した新画像を作成して表示させる外部変形を作成してみました。 新画像は、ペイントで開きます。(閉じると次の画像の処理に移ります) @REM 画像の編集(トリム・回転 他) @echo off REM #jww REM #cd REM #bz REM #zz REM #zw REM #zc REM #hf REM #h3 REM #hp REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt >jwc_temp.txt pause goto end #!ruby -Ks include Math path=Dir.pwd;path.gsub!("/","\\") puts "h#" =begin ↓JWWで編集された画像文字の座標ファイル表記 画像名 , トリム後の横幅 , トリム後の高さ , トリム左下X座標/元横幅 , トリム左下Y座標/元横幅 , トリム後の横幅/元横幅 , 回転角度 ^@BMC:\My_Documents\現場調査写真\before.jpg,134.956,64.9247,0.14623,0.254553,0.674779,0 ↓ImageMagickの主なコマンド convert 変換前の画像名 -crop widthxheight+x+y 変換後の画像名 #トリム convert before.jpg -crop 50x50+20+20 after.jpg #トリム convert before.jpg -rotate +45 after.jpg #回転 convert before.jpg -flip after.jpg #垂直方向の反転 convert before.jpg -flop after.jpg #水平方向の反転 convert before.jpg before.png #画像フォーマットの変換(jpg->png) convert before.jpg bmp3:before.bmp #従来のbmp画像へ変換(jpg->bmp) convert +append before1.jpg before2.jpg after.jpg #before1.jpgとbefore2.jpgを横結合したafter.jpgの作成 convert -append before1.jpg before2.jpg after.jpg #before1.jpgとbefore2.jpgを縦結合したafter.jpgの作成 =end #画像の編集 def gz_rota_trim(g_file,g_fname,zahyo,dir,path,kakutyosi,g_array) width=zahyo[1].to_f height=zahyo[2].to_f old_width=width/zahyo[5].to_f x=old_width*zahyo[3].to_f y=old_width*zahyo[4].to_f system("identify -format \"%w %h\" #{g_fname}>gtemp.txt") g_width,g_height=0,0 open("gtemp.txt","r"){|f| f.gets g_width,g_height=$_.split } g_width=g_width.to_f;g_height=g_height.to_f; aspect=g_height/g_width hiritu=g_width/old_width kakudo=zahyo[6].to_f x=x*hiritu old_height=old_width*aspect y=g_height-(y+height)*hiritu w=width*hiritu;h=height*hiritu new_gfile="#{g_file.gsub(/\,|\\|\:/,"_")}#{kakutyosi}" unless g_array.include?(new_gfile) STDERR.puts "#{new_gfile}をサイズ変更しています" system("convert #{g_fname} -crop #{w}x#{h}+#{x}+#{y} #{new_gfile}>nul") unless kakudo==0 STDERR.puts "#{new_gfile}を回転しています" system("convert #{new_gfile} -rotate #{-1*kakudo} #{new_gfile}>nul") end STDERR.puts "#{new_gfile}の処理が終わりました" end g_array<<new_gfile system("convert +append #{g_fname} #{new_gfile} temp#{kakutyosi}")#元画像と新画像の横結合 STDERR.puts "元画像 #{g_fname} を表示します" system("mspaint #{g_fname}") STDERR.puts "編集後の画像 #{new_gfile} を表示します" system("mspaint #{new_gfile}") STDERR.puts "結合画像を表示します" system("mspaint temp#{kakutyosi}") end g_array=[];g_no=1 while ARGF.gets xy=$_.split if xy[0]=~/^file=/ file_name=$'.chomp dir,fname=File.split(file_name) dir.gsub!("/","\\") end if xy[0]=~/^ch/ if $_=~/\"/ moji=$'.chomp pre_moji=$` end if moji=~/^\^@BM/ g_file=$' if g_file=~/^\%temp\%/ g_file2=$' zahyo=g_file2.split(",") g_fname=zahyo[0] if g_fname =~/\..{3}$/ pr_g_fname=$` kakutyosi=$& end tody=Time.new t_str=tody.strftime("%Y%m%d") dir_array=Dir.entries("C:\\jww") g_dir="" dir_array.each{|item| if item =~ /^#{t_str}\-\d+\-\d+$/ begin g_dir=item open(g_dir+"\\"+g_fname,"rb"){|f|} break rescue next end end } g_fname2 = "C:\\jww\\"+g_dir.gsub("/","\\")+"\\"+g_fname if(zahyo.size>3 && (zahyo[3].to_f != 0 or zahyo[4].to_f != 0 or zahyo[5].to_f != 1 or zahyo[6].to_f != 0)) g_fname = "gtemp#{g_no}#{kakutyosi}" system("convert #{g_fname2} bmp3:#{g_fname}") g_file2= g_fname+","+zahyo[1..-1].join(",") gz_rota_trim(g_file2,g_fname,zahyo,dir,path,kakutyosi,g_array) File.delete(g_fname) g_no += 1 else STDERR.puts "#{g_fname}は編集されていません" system("mspaint #{g_fname2}") end else zahyo=g_file.split(",") g_fname=zahyo[0] if g_fname =~/\..{3}$/ pr_g_fname=$` kakutyosi=$& end unless g_fname=~/\\/ g_fname=dir+"\\"+g_fname end if(zahyo.size>3 && (zahyo[3].to_f != 0 or zahyo[4].to_f != 0 or zahyo[5].to_f != 1 or zahyo[6].to_f != 0)) gz_rota_trim(g_file,g_fname,zahyo,dir,path,kakutyosi,g_array) else STDERR.puts "#{g_fname}は編集されていません" system("mspaint #{g_fname}") end end end end end __END__ :end |
▼kojimaさん: ImageMagickとても便利ですよね、ghostscriptを併用してpdfも扱えるし、アノテーションとか便利な機能がてんこ盛りです。 kojimaさんがこれを使って更に素晴らしいモノを作られるのが楽しみです(^_^)/ |