複数画像の一括変換にgimpのScript_Fuを使うよりも、ずっと簡単に手軽にできそうだ。 というか、gimpメモのScript_Fuを使った一括画像変換のスクリプトをしばらくぶりに使ってみたら、gimpのバージョンアップのせいか、使えなくなっていた。 Script_Fuスクリプトを見直すよりも、ImageMagickを利用した方が手軽で簡単かなと。

epsやpdfの変換ができない

セキュリティ対策で新しいバージョンではepsやpdfの変換ができなくなったらしい。

<!-- 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" />
-->

ビューワーで表示

display hoge.jpg

巨大な画像の場合、表示サイズを指定して表示

display -geometry 400x300 hoge.jpg

もっとも、gimpの方が巨大な画像を安定して開けるかもしれない。 eogは巨大なファイルは開けない。 いずれ、ビューワー類で巨大画像を開く場合は、 ターミナルから&をつけずに起動し、かたまっている場合はcntl+cで強制終了。

ファイルサイズなどの画像情報表示

identify hoge.jpg

jpgファイルをepsに変換する。

convert hoge.jpg hoge.eps

実に簡単。

pdfをepsに変換

解像度が落ちるので以下のようにする

convert -density 600 hoge.pdf hoge.eps

gif動画

a01.jpg, a02.jpg, a03.jpg...をつなげてhoge.gifというgif動画を作る。
convert a*.jpg hoge.gif

サイズ変更

縦横のドット数をそれぞれ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

トリミング

640x480の画像の上から640x400の部分を切り出したければ、

convert -crop 640x400+0+0 hoge.jpg kiritori.jpg

cropの後に、切り取り後の画像の横ピクセルx縦ピクセル+元画像の切り取り位置の左からのピクセル数+上からのピクセル数

90度回転

convert -rotate +90 hoge.jpg hoge90.jpg

時計回りなら+90(または90)、反時計回りなら-90

.JPGを.jpgに一括変換

デジカメなどの大文字の拡張子を小文字にしたい場合など。

for a in *.JPG; do cp $a `echo $a | sed s/.JPG/.jpg/g`  ; done

ここを 参考にしたが、このやり方で以下のようにいろいろできる。

顔写真などを一括90度回転

デジカメで縦長に撮影した画像は、最近は、顔がちゃんと見える方向に 自動回転されたりするが、それは、jpegの拡張機能で回転情報を入れているようで、 epsに変換すると、横向きに戻ってしまったりするので、やっぱり 複数の写真を一括で回転したいことはある。

for a in *.jpg; do convert -rotate 90 $a `echo $a | sed s/.jpg/_90.jpg/g`  ; done

複数のjpgをepsに一括変換

for a in *.jpg; do convert $a `echo $a | sed s/.jpg/.eps/g`  ; done

動画のサムネイルを一括作成

これは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の最新版のインストール

sudo add-apt-repository -n -y ppa:sicklylife/gthumb 
sudo apt update 
sudo apt install gthumb 

一括でサムネイル作成(ウェブアルバム作成用)

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,...みたいな繰り返しをコピーする要領。

フォートランで自動化

上記のようなことは、やっぱりプログラムでやった方が楽だ。

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ファイルを生成する


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-08-09 (水) 09:58:08