ImageMagickメモ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
複数画像の一括変換にgimpのScript_Fuを使うよりも、ずっと簡単に手軽にできそうだ。
というか、[[gimpメモ]]のScript_Fuを使った一括画像変換のスクリプトをしばらくぶりに使ってみたら、gimpのバージョンアップのせいか、使えなくなっていた。
Script_Fuスクリプトを見直すよりも、ImageMagickを利用した方が手軽で簡単かなと。
-http://pen.agbi.tsukuba.ac.jp/~RStiger/hiki2/?Imagemagick
-http://d.hatena.ne.jp/big-eyed-hamster/20100113/1263360526
-http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/image/magick_process.html
*epsやpdfの変換ができない [#l1f5e8bb]
セキュリティ対策で新しいバージョンではepsやpdfの変換ができなくなったらしい。
-https://qiita.com/atuyosi/items/b782ab2130570b72aa93
-locate policy.xmlでpolicy.xmlを探す。
-/etc/ImageMagick-6/policy.xml 辺りにあるので、そのディレクトリに移動
-sudo cp policy.xml policy.xml.org でバックアップ
-sudo vi policy.xml で編集し、
<!-- disable ghostscript format types -->
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="EPI" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
上記をコメントに入れる。
<!-- disable ghostscript format types
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="EPI" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
-->
*ビューワーで表示 [#t11b23f6]
display hoge.jpg
巨大な画像の場合、表示サイズを指定して表示
display -geometry 400x300 hoge.jpg
もっとも、gimpの方が巨大な画像を安定して開けるかもしれない。
eogは巨大なファイルは開けない。
いずれ、ビューワー類で巨大画像を開く場合は、
ターミナルから&をつけずに起動し、かたまっている場合はcntl+cで強制終了。
*ファイルサイズなどの画像情報表示 [#x5954da7]
identify hoge.jpg
*jpgファイルをepsに変換する。 [#f3c261f6]
convert hoge.jpg hoge.eps
実に簡単。
*pdfをepsに変換 [#gd2fd0b3]
解像度が落ちるので以下のようにする
convert -density 600 hoge.pdf hoge.eps
*gif動画 [#hdaed974]
a01.jpg, a02.jpg, a03.jpg...をつなげてhoge.gifというgif動画を作る。
convert a*.jpg hoge.gif
*サイズ変更 [#e0ffe2be]
縦横のドット数をそれぞれ50%縮小
convert -resize 50% hoge.jpg hoge50.jpg
一括の場合
for a in *.jpg; do convert -resize 50% $a `echo $a | sed s/.jpg/_50.jpg/g` ; done
*トリミング [#yef2bbf8]
640x480の画像の上から640x400の部分を切り出したければ、
convert -crop 640x400+0+0 hoge.jpg kiritori.jpg
cropの後に、切り取り後の画像の横ピクセルx縦ピクセル+元画像の切り取り位置の左からのピクセル数+上からのピクセル数
*90度回転 [#tb1e3520]
convert -rotate +90 hoge.jpg hoge90.jpg
時計回りなら+90(または90)、反時計回りなら-90
*.JPGを.jpgに一括変換 [#vb14e008]
デジカメなどの大文字の拡張子を小文字にしたい場合など。
for a in *.JPG; do cp $a `echo $a | sed s/.JPG/.jpg/g` ; done
[[ここ:http://d.hatena.ne.jp/big-eyed-hamster/20100113/1263360526]]を
参考にしたが、このやり方で以下のようにいろいろできる。
*顔写真などを一括90度回転 [#oedca95a]
デジカメで縦長に撮影した画像は、最近は、顔がちゃんと見える方向に
自動回転されたりするが、それは、jpegの拡張機能で回転情報を入れているようで、
epsに変換すると、横向きに戻ってしまったりするので、やっぱり
複数の写真を一括で回転したいことはある。
for a in *.jpg; do convert -rotate 90 $a `echo $a | sed s/.jpg/_90.jpg/g` ; done
*複数のjpgをepsに一括変換 [#pa2a4b22]
for a in *.jpg; do convert $a `echo $a | sed s/.jpg/.eps/g` ; done
*動画のサムネイルを一括作成 [#j1137b1e]
これはconvertではなくて、ffmpegを使うのだけど、以下のように書いたファイルを作って、実行属性を与えて実行。
gthumbのウェブアルバムが最近のバージョンとubuntu20以降?の環境では、動画のサムネイルを生成できないようなので。
for VIDEO in $(ls *.mp4 | sed 's/.mp4//')
do
ffmpeg -i ${VIDEO}.mp4 -ss 6 -vframes 1 -f image2 -s 159x119 ${VIDEO}.mp4.small.jpeg
done
for a in *.MOV; do ffmpeg -i $a -vf thumbnail=1000,scale=650:488 -frames:v 1 `echo $a | sed s/.MOV/.MOV.medium.jpeg/g` ; done
for a in *.MOV; do ffmpeg -i $a -vf thumbnail=1000,scale=120:90 -frames:v 1 `echo $a | sed s/.MOV/.small.jpeg/g` ; done
find ./ -name '*.html' -exec sed -i 's/width="0"\ height="0"/width="650"\ height="488"/g' {} \;
**gthumbの最新版のインストール [#kcd10ed3]
sudo add-apt-repository -n -y ppa:sicklylife/gthumb
sudo apt update
sudo apt install gthumb
*一括でサムネイル作成(ウェブアルバム作成用) [#y7eac02d]
Vine Linux 6になってgthumbがバージョン2.12.3になったら、
気軽なウェブアルバム作成機能が見当たらなくなってしまった。
サムネイルさえ自動生成できれば、
後は、lsとかlibreofficeとかでシンプルなhtmlファイルを作ればいいか。
for a in *.JPG; do convert -resize 120x90 $a `echo $a | sed s/.JPG/_120.jpg/g` ; done
上の例は、デジカメのA1234.JPGみたいな画像ファイルに対して120x90のサムネイルを
一括生成して、A1234_120.jpgみたいな名前をつける。
ウェブアルバムを作るには、
ls A*.JPG > A.csv
ls A*_120.jpg A_120.csv
みたいにしておいて、libreofficeの表計算ツールで、空の列をはさみながら、
A.csvとA_120.csvをそれぞれ2列に読み込んで、
空の列のところにhtmlタグを入れる。
例えば、1行に写真を5枚ずつ並べるなら、
,<tr><td><a href=",A1234.JPG,"><img src=",A1234_120.jpg," /></a></td>
,<td><a href=",A1235.JPG,"><img src=",A1235_120.jpg," /></a></td>
,<td><a href=",A1236.JPG,"><img src=",A1236_120.jpg," /></a></td>
,<td><a href=",A1237.JPG,"><img src=",A1237_120.jpg," /></a></td>
,<td><a href=",A1238.JPG,"><img src=",A1238_120.jpg," /></a></td></tr>
,<tr><td><a href=",A1239.JPG,"><img src=",A1239_120.jpg," /></a></td>
,<td><a href=",A1240.JPG,"><img src=",A1240_120.jpg," /></a></td>
,<td><a href=",A1241.JPG,"><img src=",A1241_120.jpg," /></a></td>
,<td><a href=",A1242.JPG,"><img src=",A1242_120.jpg," /></a></td>
,<td><a href=",A1243.JPG,"><img src=",A1243_120.jpg," /></a></td></tr>
みたいにhtmlタグを挿入する。
<tr><td>が1行の次は<td>が4行続くといった5行ずつの繰り返しを
libreoffice上でコピーするには、5行ぶんのセルを領域選択してから、
マウスポインターを選択領域の右下に持って行って、ポインターが+印に
変化してから、クリックしたまま下側にずらしていけばよい。
要は、1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,...みたいな繰り返しをコピーする要領。
*フォートランで自動化 [#o9320ca6]
上記のようなことは、やっぱりプログラムでやった方が楽だ。
for a in *.jpg; do convert -resize 120x90 $a `echo $a | sed s/.jpg/_120.jpeg/g` ; done
みたいにして、デジカメのa1234.jpgみたいなファイルに対して、
120x90のサムネイルをa1234.jpegみたいに拡張子を変えて生成。で、
ls *.JPG > lsjpg
ls *_120.jpeg >lsjpeg
として、元画像のリストをlsjpgに、サムネイルのリストをlsjpegに保存。
で、lsjpgの冒頭に写真の枚数を入れてから、以下のフォートランのプログラムを実行。
implicit real*8(a-h,o-z)
character a20*20,b20*20
nretu=3
open(4,file='lsjpg')
read(4,*) n
open(5,file='lsjpeg')
iretu=0
do i=1,n
if(iretu==0) then
print*,'<tr>'
end if
iretu=iretu+1
read(4,*) a20
read(5,*) b20
print*,'<td><a href=\"',a20,'"><img src="',b20,'\" /></a></td>'
if(iretu==nretu) then
print*,'</tr>'
iretu=0
end if
end do
end
*画像ファイル1枚ごとに1ページずつhtmlファイルを生成する [#wec3bbfe]
-http://www.str.ce.akita-u.ac.jp/~gotou/programoj/#sonota
終了行:
#contents
複数画像の一括変換にgimpのScript_Fuを使うよりも、ずっと簡単に手軽にできそうだ。
というか、[[gimpメモ]]のScript_Fuを使った一括画像変換のスクリプトをしばらくぶりに使ってみたら、gimpのバージョンアップのせいか、使えなくなっていた。
Script_Fuスクリプトを見直すよりも、ImageMagickを利用した方が手軽で簡単かなと。
-http://pen.agbi.tsukuba.ac.jp/~RStiger/hiki2/?Imagemagick
-http://d.hatena.ne.jp/big-eyed-hamster/20100113/1263360526
-http://www.envinfo.uee.kyoto-u.ac.jp/user/susaki/image/magick_process.html
*epsやpdfの変換ができない [#l1f5e8bb]
セキュリティ対策で新しいバージョンではepsやpdfの変換ができなくなったらしい。
-https://qiita.com/atuyosi/items/b782ab2130570b72aa93
-locate policy.xmlでpolicy.xmlを探す。
-/etc/ImageMagick-6/policy.xml 辺りにあるので、そのディレクトリに移動
-sudo cp policy.xml policy.xml.org でバックアップ
-sudo vi policy.xml で編集し、
<!-- disable ghostscript format types -->
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="EPI" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
上記をコメントに入れる。
<!-- disable ghostscript format types
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="EPI" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
-->
*ビューワーで表示 [#t11b23f6]
display hoge.jpg
巨大な画像の場合、表示サイズを指定して表示
display -geometry 400x300 hoge.jpg
もっとも、gimpの方が巨大な画像を安定して開けるかもしれない。
eogは巨大なファイルは開けない。
いずれ、ビューワー類で巨大画像を開く場合は、
ターミナルから&をつけずに起動し、かたまっている場合はcntl+cで強制終了。
*ファイルサイズなどの画像情報表示 [#x5954da7]
identify hoge.jpg
*jpgファイルをepsに変換する。 [#f3c261f6]
convert hoge.jpg hoge.eps
実に簡単。
*pdfをepsに変換 [#gd2fd0b3]
解像度が落ちるので以下のようにする
convert -density 600 hoge.pdf hoge.eps
*gif動画 [#hdaed974]
a01.jpg, a02.jpg, a03.jpg...をつなげてhoge.gifというgif動画を作る。
convert a*.jpg hoge.gif
*サイズ変更 [#e0ffe2be]
縦横のドット数をそれぞれ50%縮小
convert -resize 50% hoge.jpg hoge50.jpg
一括の場合
for a in *.jpg; do convert -resize 50% $a `echo $a | sed s/.jpg/_50.jpg/g` ; done
*トリミング [#yef2bbf8]
640x480の画像の上から640x400の部分を切り出したければ、
convert -crop 640x400+0+0 hoge.jpg kiritori.jpg
cropの後に、切り取り後の画像の横ピクセルx縦ピクセル+元画像の切り取り位置の左からのピクセル数+上からのピクセル数
*90度回転 [#tb1e3520]
convert -rotate +90 hoge.jpg hoge90.jpg
時計回りなら+90(または90)、反時計回りなら-90
*.JPGを.jpgに一括変換 [#vb14e008]
デジカメなどの大文字の拡張子を小文字にしたい場合など。
for a in *.JPG; do cp $a `echo $a | sed s/.JPG/.jpg/g` ; done
[[ここ:http://d.hatena.ne.jp/big-eyed-hamster/20100113/1263360526]]を
参考にしたが、このやり方で以下のようにいろいろできる。
*顔写真などを一括90度回転 [#oedca95a]
デジカメで縦長に撮影した画像は、最近は、顔がちゃんと見える方向に
自動回転されたりするが、それは、jpegの拡張機能で回転情報を入れているようで、
epsに変換すると、横向きに戻ってしまったりするので、やっぱり
複数の写真を一括で回転したいことはある。
for a in *.jpg; do convert -rotate 90 $a `echo $a | sed s/.jpg/_90.jpg/g` ; done
*複数のjpgをepsに一括変換 [#pa2a4b22]
for a in *.jpg; do convert $a `echo $a | sed s/.jpg/.eps/g` ; done
*動画のサムネイルを一括作成 [#j1137b1e]
これはconvertではなくて、ffmpegを使うのだけど、以下のように書いたファイルを作って、実行属性を与えて実行。
gthumbのウェブアルバムが最近のバージョンとubuntu20以降?の環境では、動画のサムネイルを生成できないようなので。
for VIDEO in $(ls *.mp4 | sed 's/.mp4//')
do
ffmpeg -i ${VIDEO}.mp4 -ss 6 -vframes 1 -f image2 -s 159x119 ${VIDEO}.mp4.small.jpeg
done
for a in *.MOV; do ffmpeg -i $a -vf thumbnail=1000,scale=650:488 -frames:v 1 `echo $a | sed s/.MOV/.MOV.medium.jpeg/g` ; done
for a in *.MOV; do ffmpeg -i $a -vf thumbnail=1000,scale=120:90 -frames:v 1 `echo $a | sed s/.MOV/.small.jpeg/g` ; done
find ./ -name '*.html' -exec sed -i 's/width="0"\ height="0"/width="650"\ height="488"/g' {} \;
**gthumbの最新版のインストール [#kcd10ed3]
sudo add-apt-repository -n -y ppa:sicklylife/gthumb
sudo apt update
sudo apt install gthumb
*一括でサムネイル作成(ウェブアルバム作成用) [#y7eac02d]
Vine Linux 6になってgthumbがバージョン2.12.3になったら、
気軽なウェブアルバム作成機能が見当たらなくなってしまった。
サムネイルさえ自動生成できれば、
後は、lsとかlibreofficeとかでシンプルなhtmlファイルを作ればいいか。
for a in *.JPG; do convert -resize 120x90 $a `echo $a | sed s/.JPG/_120.jpg/g` ; done
上の例は、デジカメのA1234.JPGみたいな画像ファイルに対して120x90のサムネイルを
一括生成して、A1234_120.jpgみたいな名前をつける。
ウェブアルバムを作るには、
ls A*.JPG > A.csv
ls A*_120.jpg A_120.csv
みたいにしておいて、libreofficeの表計算ツールで、空の列をはさみながら、
A.csvとA_120.csvをそれぞれ2列に読み込んで、
空の列のところにhtmlタグを入れる。
例えば、1行に写真を5枚ずつ並べるなら、
,<tr><td><a href=",A1234.JPG,"><img src=",A1234_120.jpg," /></a></td>
,<td><a href=",A1235.JPG,"><img src=",A1235_120.jpg," /></a></td>
,<td><a href=",A1236.JPG,"><img src=",A1236_120.jpg," /></a></td>
,<td><a href=",A1237.JPG,"><img src=",A1237_120.jpg," /></a></td>
,<td><a href=",A1238.JPG,"><img src=",A1238_120.jpg," /></a></td></tr>
,<tr><td><a href=",A1239.JPG,"><img src=",A1239_120.jpg," /></a></td>
,<td><a href=",A1240.JPG,"><img src=",A1240_120.jpg," /></a></td>
,<td><a href=",A1241.JPG,"><img src=",A1241_120.jpg," /></a></td>
,<td><a href=",A1242.JPG,"><img src=",A1242_120.jpg," /></a></td>
,<td><a href=",A1243.JPG,"><img src=",A1243_120.jpg," /></a></td></tr>
みたいにhtmlタグを挿入する。
<tr><td>が1行の次は<td>が4行続くといった5行ずつの繰り返しを
libreoffice上でコピーするには、5行ぶんのセルを領域選択してから、
マウスポインターを選択領域の右下に持って行って、ポインターが+印に
変化してから、クリックしたまま下側にずらしていけばよい。
要は、1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,...みたいな繰り返しをコピーする要領。
*フォートランで自動化 [#o9320ca6]
上記のようなことは、やっぱりプログラムでやった方が楽だ。
for a in *.jpg; do convert -resize 120x90 $a `echo $a | sed s/.jpg/_120.jpeg/g` ; done
みたいにして、デジカメのa1234.jpgみたいなファイルに対して、
120x90のサムネイルをa1234.jpegみたいに拡張子を変えて生成。で、
ls *.JPG > lsjpg
ls *_120.jpeg >lsjpeg
として、元画像のリストをlsjpgに、サムネイルのリストをlsjpegに保存。
で、lsjpgの冒頭に写真の枚数を入れてから、以下のフォートランのプログラムを実行。
implicit real*8(a-h,o-z)
character a20*20,b20*20
nretu=3
open(4,file='lsjpg')
read(4,*) n
open(5,file='lsjpeg')
iretu=0
do i=1,n
if(iretu==0) then
print*,'<tr>'
end if
iretu=iretu+1
read(4,*) a20
read(5,*) b20
print*,'<td><a href=\"',a20,'"><img src="',b20,'\" /></a></td>'
if(iretu==nretu) then
print*,'</tr>'
iretu=0
end if
end do
end
*画像ファイル1枚ごとに1ページずつhtmlファイルを生成する [#wec3bbfe]
-http://www.str.ce.akita-u.ac.jp/~gotou/programoj/#sonota
ページ名: