過去ログ

                                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

 ───────────────────────────────────────  ■題名 : Re:ImageMagick  ■名前 : マチャプチャレ  ■日付 : 17/1/20(金) 6:51  -------------------------------------------------------------------------
   ▼kojimaさん:

ImageMagickとても便利ですよね、ghostscriptを併用してpdfも扱えるし、アノテーションとか便利な機能がてんこ盛りです。

kojimaさんがこれを使って更に素晴らしいモノを作られるのが楽しみです(^_^)/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 266