


こんにちは。
サークルや友達で集まったときにデジカメ写真をたくさん撮り、それをソーシャルネットワーキングサイトにアップロードしています。
他の人が撮った同じような構図のものを区別するために、自分で撮った写真にかわいくロゴと日付・場所を入れているのですが、
今は無料ソフトを使っています。
試行錯誤の上、やっと1枚に10分くらい掛かって出来るようになりましたが、とても撮影枚数に追いつきません。
そこで、「大量に撮った写真にバッチ処理でロゴを入れる」ソフトと方法を探しています。
細かい条件は下に書きました。
条件
1. ロゴは全ての画像に同じもの2つずつ、それぞれ位置を指定して貼り付けたい。
2つのロゴ画像はSVG形式で別々に前以って用意してあります。
ロゴは透過背景にしたいので、SVG形式が良いということまでは調べました。
2. クロップをすることも多いので、デジカメで撮った写真はサイズが一定でない。その結果、端からの位置をパーセントで指定したい。
(パーセントが無理なら、画像のピクセルサイズを読み込んでロゴ貼り付け位置をピクセルで計算して指定したい。)
3.ロゴのサイズもクロップした後の画像サイズに合わせて(比例して)小さくしたい。
つまり、クロップされた画像のサイズが元画像からのパーセントでわかるようにして、それを使ってロゴのサイズを小さくしたい。
4. ロゴ貼り付け位置の指定が、1つは左上の角からと、もう1つは右下の角からとの両方出来ると良い。
(出来ない場合は、写真画像が縦長か横長かを自動判別して、それによって指定位置を変更したい。)
以上で、条件1と2は絶対に欲しいです。
「このソフトだったら、こういう方法で出来るよ」という感じで教えていただけませんか?
無料のソフト、もしくは Photoshop かIllustrator だと嬉しいです。
(無料のソフトを教えてもらえると、気軽に試せるのが利点で、デスクトップとノートパソコンに入れられます。
Photoshop とIllustrator は、自分はまだ使ったことがありませんが、学校で使えます。
それにネットで検索して自分で出来るようになることが多そうなので考慮に入れています。)
どうかよろしくお願いします。
書込番号:12122504
0点

ConvertImageというソフトを使ってみましたがシェアウェアだったので他のソフトが無いか調べ中です。
Inkscapeがjpegに対応してないのが恨めしい。
コマンドラインで画像変換できるソフトがありましたら教えて下さい。
とりあえず以下のソフトでスクリプトを組めば自動的にロゴを入れられると思います。
価格.comの掲示板だと変に改行されてしまうので、スクリプトは画像を参照して下さい。
ActivePerl
http://www.activestate.com/activeperl/downloads
Inkscape
http://inkscape.org/download/?lang=ja
GetPicSize.pl
http://cachu.xrea.jp/perl/GetPicSize.html
あとはPNG→JPEG画像変換ソフトが必要
下のスクリプトはConvertImageが入ってないと動きません。
############ a.pl というファイルを作成 ##############
# GetPicSize.pl を a.pl と同じフォルダに入れる
require 'GetPicSize.pl';
# 元画像フォルダ
$dir1='D:\pic1';
# 出力フォルダ
$dir2='D:\pic2';
# Inkscapeフォルダ
$inkscape='C:\Program Files\Inkscape\inkscape.exe';
opendir(OP,"$dir1");
while($tmp=readdir OP){
$tmp=~/(.*?)\.jpg$/ and push(@file,$1);
}
closedir OP;
foreach $tmp(@file){
($format, $width, $height)=&GetImageSize("$tmp.jpg");
open(WR,">$dir1\\$tmp.svg");
print WR<<EOF;
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="default" width="$width" height="$height">
<image xlink:href="$tmp.jpg" x="0" y="0" width="$width" height="$height"/>
<rect x="85" y="28" width="60" height="15"/>
</svg>
EOF
close WR;
system("inkscape -f $dir1\\$tmp.svg -e $dir1\\$tmp.png");
system("convertimage /S \"$dir1\\$tmp.png\" /T \"$dir2\\$tmp.jpg\" /F8 /C1 /4 78");
unlink "$dir1\\$tmp.png","$dir1\\$tmp.svg";
}
############ 終了 ##############
書込番号:12125480
1点

甜さん、とっても丁寧にありがとうございます!
プログラムまで書いてもらって感激です。
ConvertImage はこれでしょうか?
http://www.softpedia.com/get/Multimedia/Graphic/Image-Convertors/Convert-Image.shtml
200ドルはちょっと高いですね。
もし使い方が一番簡単なソフトなら魅力的ですが。
永遠と手作業でやっていることを考えると、その分の時間にバイトのシフトを入れた方が安く付きますし(汗)
以下の4つが必要ということですね?
- ActivePerl
- Inkscape
- GetPicSize.pl
- a.pl
C言語は習ったことがあるのですが、Perl は聞いたことしかありませんが同じ感じですか?。
ActivePerl をインストールして、その中でa.pl を実行すればいいんですよね?
これから試してみます。
PNGで出力ですね。
PNGからJPEG画像への変換は大丈夫です。
書込番号:12126001
0点

教えてもらっている方はまだ試行錯誤中ですが、調べていたらInkscape用でこんなものを見つけました。
InkscapeBatch
http://sourceforge.net/projects/inkscapebatch/
機能説明とかマニュアルとか無いみたいで、使えるかわかりません。
しかも、Inkscape のポータブルだと、このプログラムはうまく検知してくれないようです。
InkscapeBatchをインストールしてみたのに駄目でした。
ポータブルでない方のInkscape でうまく動いたとして、それでも画像サイズを取得するのにはConvertImageは必要でしょうか?
書込番号:12126321
0点

InkscapeBatchはGUIアプリでかつInkscapeでできる画像変換をバッチ処理するだけのソフトなようです。
CUIアプリが必要なことと、Inkscape自体がコマンドラインからの操作が可能なので今回は役には立ちません。
画像サイズの取得はGetPicSize.plで行っていて、Perlだけで取得してるのでInkscapeなどは関係ありません。
Perlは、違う点は沢山ありますがCみたいなものだと思って下さい。
Windowsならplファイルをクリックすれば実行されるので、コマンドラインを呼び出す必要もありません。
後からImageMagickというフリーソフトを使ったらうまくjpegに変換できました。
ところでロゴの大きさと位置はどのような計算式で求めればいいのでしょうか?
自力でPerlスクリプトを修正するのでしたら問題ないのですが。
参考までにPerlのリファレンスマニュアルを。
http://www.nwt.jp/document/perlfunc/index.htm
書込番号:12127523
1点

一番最初のお返事の中で、「下のスクリプトはConvertImageが入ってないと動きません。」とあったのを
「画像サイズの取得にConvertImage を利用している」と勘違いしていました。
正しくは、「画像サイズの取得はGetPicSize.pl だけで行っている」んですね。
ということは、a.pl の最後の部分でPNG からJPG に変換している部分を取り除くと、
ConvertImage は要らないということですか?
それなら、別のソフトを使ってやれるので200ドルも払わなくていいですね。
私は「藤 -Resizer -」というソフトを使ったことがありますので、Perl のプログラムとは別でも構いません。
ImageMagick はもっと機能があって便利そうですね。
Perl はファイルをクリックするだけで良いということで安心しました。
授業でC言語を習っただけなので、あまり難しい操作は知りませんから。
ロゴの大きさと位置の計算式
-------
Inkscape では、写真の画像を(x, y) = (0, 0) に置くと、左下の角が座標の原点になりますね。
それを利用して、操作が簡単になるように考えてみました。
まず、画像サイズが 幅 W_photo で高さ H_photo だと取得できたとします。
1つ目のロゴのサイズは 幅 W_logo1、高さ H_logo1 で用意します。
ロゴの大きさは、写真画像サイズに比例して縮小。
W_logo1 = W_logo1_original * (W_photo / 4000)
H_logo1 = H_logo1_original * (H_photo / 3000)
位置は、写真の左上の角に、ロゴの左上の角を合わせる。
(x_logo1, y_logo1) = (0, H_photo - H_logo1)
同じようなことを2つ目のロゴにもする。
W_logo2 = W_logo2_original * (W_photo / 4000)
H_logo2 = H_logo2_original * (H_photo / 3000)
(x_logo2, y_logo2) = (W_photo - W_logo2, 0)
-------
こんな感じで出来るでしょうか?
書込番号:12130127
0点

もうConvertImageは完全に要りません。
その代わりImageMagickの方をインストールして下さい。
無くてもいいんですが今回は非常に便利なので。
一応それらしいものは出来たのですが、SVG内でのimageタグでsvgファイルを指定したものが描画されずに困っています。
直接SVGソースにロゴデータを埋め込んで対処しようと試みました。
下のPerlスクリプト内にsymbolタグを使ってる部分がありますが、そこにロゴデータを入れて下さい。
外部svgファイルを参照できればいいんですけどimageタグ以外に何か方法があるでしょうか?
下記ページを参考にSVGを勉強してみましたが何故かimage xlink:hrefだけ駄目でした。
http://www.marenijr.net/p/svg/003/02.html
それと、SVGでは原点は左上でした。
一応修正して左上と右下にロゴを持ってくるようにしました。
下記Perlスクリプトソースは掲示板の仕様上、やや文字化け?気味なので添付画像を参考にして下さい。
$dir1には元画像を置いてあるフォルダパスを指定、$dir2は可能であれば空フォルダを指定した方がいいです。
ロゴサイズ(W_logo1_original等)も適当に200*200にしましたが、適宜修正を。
########## ここから a.pl #############
require 'GetPicSize.pl';
########### 各種設定 ###########
#
# 元画像フォルダ
$dir1='D:\pic1';
# 出力フォルダ
$dir2='D:\pic2';
# XPでは以下の設定でいいが、7だと違うかもしれない
# Inkscape.exeのパス
$inkscape='C:\Program Files\Inkscape\inkscape.exe';
# ImageMagickのパス
$imagemagick='C:\Program Files\ImageMagick-6.6.5-Q16\convert.exe';
# logo1、logo2のサイズ
$W_logo1_original=200;
$H_logo1_original=200;
$W_logo2_original=200;
$H_logo2_original=200;
#
#################################
opendir(OP,"$dir1");
while($tmp=readdir OP){
$tmp=~/(.*?)\.jpg$/ and push(@file,$1);
}
closedir OP;
foreach $tmp(@file){
($format, $W_photo, $H_photo)=&GetImageSize("$dir1\\$tmp.jpg");
$W_logo1 = $W_logo1_original * ($W_photo/4000);
$H_logo1 = $H_logo1_original * ($H_photo/3000);
($x_logo1, $y_logo1) = (0, 0);
$W_logo2 = $W_logo2_original * ($W_photo/4000);
$H_logo2 = $H_logo2_original * ($H_photo/3000);
($x_logo2, $y_logo2) = ($W_photo - $W_logo2, $H_photo - $H_logo2);
open(WR,">$dir1\\$tmp.svg");
print WR<<EOF;
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="default" width="$W_photo" height="$H_photo">
<image xlink:href="$tmp.jpg" x="0" y="0" width="$W_photo" height="$H_photo"/>
<use x="$x_logo1" y="$y_logo1" xlink:href="#figs1" width="$W_logo1" height="$H_logo1"/>
<use x="$x_logo2" y="$y_logo2" xlink:href="#figs2" width="$W_logo2" height="$H_logo2"/>
<symbol id="figs1" width="70" height="70">
<circle cx="50" cy="50" r="20"/>
</symbol>
<symbol id="figs2" width="70" height="70">
<rect width="50" height="50"/>
</symbol>
</svg>
EOF
close WR;
system("\"$inkscape\" -f $dir1\\$tmp.svg -e $dir1\\$tmp.png");
system("\"$imagemagick\" \"$dir1\\$tmp.png\" \"$dir2\\$tmp.jpg\"");
unlink "$dir1\\$tmp.png","$dir1\\$tmp.svg";
}
書込番号:12130368
0点

なんだか難しい話が..^^;
中身は殆どPhotoshopのアクションですが、一応1〜4をクリアできるかと
http://wckwrmui.xxxxxxxx.jp/logo.html
余計な点、足らない点があると思いますけど私の環境では一応動作してます(^^ゞ
書込番号:12130417
0点

甜さん、ありがとうございます。
もうちょっとみたいで緊張してきました。
> 外部svgファイルを参照できればいいんですけどimageタグ以外に何か方法があるでしょうか?
よくわかっていないんですが、
Inkscape のインポートのコマンドで.svg のファイルを挿入するのでは駄目ですか?
manamonさん、ありがとうございます。
Photoshop でもできるんですね。
難しくてほとんど意味が取れなくて悲しいですけど。
コメントをつけてもらえませんか?
アクションのプログラムということですが、どういう操作で実行できますか?
バッチ処理のための写真のフォルダーを指定する箇所がないようですし。
.eps なのは.svg が使えないためですか?
書込番号:12132826
0点

一応、既に出来てると言えば出来てる状態です。
ファイルを作るの面倒でしょうからアップロードしてみました。
http://www.dotup.org/uploda/www.dotup.org1223236.lzh.html
パスワードはkakakuです。(現在混んでて重いようです)
a.pl をメモ帳などのテキストエディタで開いて、「各種設定」の部分を設定すればOKです。
正常に動けば指定したフォルダ内のすべてのjpeg画像の左上と右下に黒丸と黒四角が描画されます。
あとは黒丸と黒四角をロゴのSVGソースに置き換えるだけです。
>Inkscape のインポートのコマンドで.svg のファイルを挿入するのでは駄目ですか?
GUI操作ならそれでOKなんですけどコマンドラインから使うとなるとちょっと無理な気がします。
ひょっとしたら出来るのかもしれませんが、コマンドがさっぱり分かりません。
書込番号:12133768
1点

コメント付けられるほど詳しくありませんけど、Photoshopでやってみました。
バージョンはCS5です。確認ができないのですが、比較的新しいバージョンだと実行できると思います。
大半が、スクリプティングサポートプラグイン(ScriptListener.8li)を使って出力したものです。
内容はアクションスクリプトと同等だと思いますが、条件分岐等を加えるといろいろなことができると思います。
(Windows環境と仮定。Macは不明)
使い方ですが、単体では使えません(使用状況によって内容の編集も必要です。)
一枚の画像に対しても、バッチでもPhotoshop経由で行ないます。
任意の場所に.jsx(スクリプト)ファイルを保存して、画像を開き、ファイル>スクリプト>参照 からスクリプトを読み込みます。
すると、C:\pict\logo.eps と C:\pict\logo2.eps の両ファイルが読み込まれて、スクリプトで指定した位置・サイズで配置されます。
この、スクリプトの実行やファイルの保存等をアクションとして記録すればBridgeとかPhotoshopからバッチ処理ができます。
.svgではなく、.epsとしたのは Photoshopに読み込ませるためです。
epsでも透過情報は扱えると思うので、問題なしとしました。
Inkscapeもepsを扱えるので、互換もあると思います。
読み込み元のフォルダーは、Photoshopのバッチ処理で指定ができるので無くても大丈夫です。
アクションはドロップレットに登録することもできるので画像やフォルダをドロップして処理完了とすることもできます。
難点?としては、Photoshop経由でスクリプトを実行するので動作速度が少し遅いことでしょうか。
大量の画像だったり、大きな画像だと動作が緩慢になりやすいと思います。
Perlも含め、スクリプトはさっぱりです^^;
書込番号:12133800
1点

甜さん
ちょっと試してみましたが時間が無かったので途中で諦めました。
土日に再挑戦する予定です。
manamonさん
自動生成されたスクリプトだったんですね。
どうりでプログラムとして読めなかったわけです。
まだ数値の変更の仕方がわかっていないので、こちらも後で試してみます。
Photoshop は沢山機能があるみたいでちょっと大変そうです。
書込番号:12164612
0点

あれから内容を少し変更したんですが、まだロゴの配置が不完全なので 計算を複雑にする必要がありそうです。
今のままだと、簡易プロンプト画面が毎回表示されるので有効にしてません。
数値はメモ帳等で編集更新します。
使っている機能は、「配置」と「自由変形」、ロゴサイズを揃えるのにdpi変更 です。
書込番号:12164906
0点

甜さん
> 正常に動けば指定したフォルダ内のすべてのjpeg画像の左上と右下に黒丸と黒四角が描画されます。
ここまでは出来ました。
> あとは黒丸と黒四角をロゴのSVGソースに置き換えるだけです。
具体的にどうすればいいですか?
<use xlink:href = " " /> の中にSVG のファイル名を入れたり色々と変更してみましたが駄目でした。
<use> の他にも <image> タグがあるみたいですが、こちらもうまく行きません。
書込番号:12242989
0点

<symbol id="figs1" width="70" height="70">
<circle cx="50" cy="50" r="20"/>
</symbol>
<symbol id="figs2" width="70" height="70">
<rect width="50" height="50"/>
</symbol>
の部分を書き換えるだけです。
<symbol id="figs1" 〜></symbol>の間にはさんだものはlogo1扱い、
<symbol id="figs2" 〜></symbol>の間にはさんだものはlogo2扱いです。
この辺は普通のSVGと同じです。
書込番号:12244231
0点

甜さん
<symbol ...
...
</symbol>
の部分の書き換えは、そこに入れたい形や文字のタグをいれるということですか? こちらが用意したファイル(.svg など、背景が透明になるもの)を挿入するようにしたいのですが。
<circle ... > のかわりに<image ...> を入れてもa.pl が途中で終わってしまうみたいです。
(perl はエラーメッセージがでないようなのでデバッグが難しいです。)
他のやり方も試していますが別ファイルの挿入ができません。
a.pl が途中で終わってしまうか、「Linked Image Not Found」 というエラーが画像に埋め込まれてしまいます。
例えば、
<use xlink:href="#figs1" / >
のところを、
<image xlink:href="logo1.svg" / >
にして、さらに、
<symbol ...
...
</symbol>
の部分を全部削除してみたんですが、うまく行きません。
どういうやり方が正当なやり方ですか?
今までやったことないので戸惑っています。
書込番号:12247698
0点

<image xlink:href="logo1.svg"
というタグ自体がInkscapeが悪いのか人間が悪いのか、受け付けてくれません。
もし上記のタグが使えれば非常に単純なものになったのですが。
logo1.svgというファイルでロゴファイルを保存しているなら、ロゴマーク部分のタグを全部コピペしてきて
<symbol>タグにはさめばうまくいくと思います。
perlでエラーメッセージを出す方法は、ファイル名を指定して実行でcmdを出して
コマンドプロンプトから a.pl などを実行すれば出せます。
書込番号:12247892
0点

甜さんのプログラムで試行錯誤して出来ました!
本当にありがとうございます。
ロゴを付けるのがとても楽になりました。
ただ、普段はいいのですが、一つだけ問題がある時があります。
姉が持っているニコンの一眼レフのカメラを使って Adobe RGB という色空間?の設定で写真を撮るときがあります。
その写真をInkscape で保存すると、色が少し暗なって微妙に灰色っぽくなるときがあります。
肌色とかが薄暗くなる感じです。
Color management (= 色の管理) の設定が良くないのかと思って、色々試しても正しい設定の選択が見つかりません。
この問題は、別の問題になってしまうので、また別のスレッドで質問させてもらうかもしれません。
manamonさんのPhotoshop のプログラムも使えるようになりたいですが、Photoshop 自体が大変ですね。
もうちょっとPhotoshop の使い方を勉強してから再挑戦する予定です。
Photoshop はAdobe 製品なので、Adobe RGB との相性も良さそうですし。
書込番号:12318314
0点

Photoshopは慣れれば普通に使えると思いますよ。
操作方法を簡単にまとめたのでよければどうぞ
http://mmid.web.fc2.com/logo.html
Inkscapeのカラマネ設定は、「Inkscapeの設定」と「ドキュメントの設定」にありますが
これがどう作用するのかイマイチ掴めません。
Photoshopのカラマネは分かりやすいと思います
書込番号:12322269
0点


このスレッドに書き込まれているキーワード
クチコミ掲示板検索
クチコミトピックス
- 5月30日(火)
- 深夜に使える掃除機ですか
- ビデオカードの不具合
- QRコードの取得ができない
- 5月29日(月)
- 音楽プレーヤーの発熱
- 4Kビデオカメラの購入検討
- スマホの再起動の原因は?
- 5月26日(金)
- 電源オフ中に音が出る原因
- 自作PCのCPUの購入検討
- トリミング写真の保存方法
- 5月25日(木)
- 調整時カーテンは閉める?
- モニターのちらつきの原因
- 湿気に強いA3ノビ写真用紙
- 5月24日(水)
- 洗濯後に出る埃の原因は?
- グラボ購入にアドバイスを
- アプリ通知が表示されない
新着ピックアップリスト
価格.comマガジン
注目トピックス

新製品ニュース Headline
更新日:5月26日
-
[デジタルカメラ]
-
[デジタル一眼カメラ]
-
[デジタル一眼カメラ]
-
[ウェアラブル端末・スマートウォッチ]

(パソコン)
