php(ImageMagick)で EPS, AI 画像に変換する(その3)

EPS, AI をPHPなどプログラムで変換するときのコツを書きます。(その2)

イラストレーター(.ai)
「PDF互換」で透過されていれば、そのまま透過されます。
「PDF互換」で透過されていなければ、そのまま透過されません。
※ ちなみに、「PDF互換なし」で入稿すると、データがありませんと返ってきます。
イラレ入稿には、レイヤは関係ないのです。
レイヤで透かしを入れたとか、レイヤで透過していたとか、印刷ができてから言っても無理なので、ご注意ください。
イラレの場合「レイヤに透過情報が入っている」は無効です。
イラレの場合「PDF互換レイヤに透過情報」が入っていることが重要です。

フォトショップ(.eps)
各レイヤが画像ですので、レイヤごとに一枚の画像ファイルとして出力されます。
吐き出しファイル名を「output.png」と指定すると
output-0.png
output-1.png
output-2.png
output-3.png
output-*.png
というように、沢山のファイルが吐出されます。
ゼロは全レイヤを統合した画像ファイル
それ以降は、レイヤごとに画像化したファイル
です。
レイヤが独立した画像として認識されるので「透過情報」も引き継がれます。

DTP印刷でも、プログラムの自動処理でも、入稿したとおりに透過情報も反映されます。

※ イラレ入稿で透過されないのは、入稿データが透過されていないのです。

 

試しに
私も、入稿データを作ってみました。

フォトショでは透過情報を簡単にきちんと保存できます。
イラレで透過情報をきちんと保存することは、神業くらい難しいようです。
イラレでレイヤ単位で透過しているのは、大概はベクトル情報です。(←NG) 画像情報としてきちんと透過しなければ入稿には反映されません)

↑確認方法は

イラレで保存したデータを、他のソフトで開いてみてください。
それで透過していたら成功です!

php(ImageMagick)で EPS, AI 画像に変換する(その2)

EPS, AI をPHPなどプログラムで変換するときのコツを書きます。(その2)

イラストレーター(.ai)
透過しているか? 透過していないか?(←ここは自己責任)
一枚の画像化されたレイヤ(PDF互換レイヤ)が印刷対象です。
(イラレでしか見れない他のレイヤは無意味ということです)

フォトショップ(.eps)
各レイヤが画像ですので、レイヤごとに一枚の画像ファイルとして出力されます。
レイヤごとに、印刷に使用されます。

ここで、よくあるトラブルが
イラレで透過していたのに、透過していないポスターが何百枚も出来上がってきた。

イラレは「PDF互換の1レイヤ」のみが利用されます。
それが透過していなかったのなら、入稿した人の原因です。

そういう理由で
イラレで入稿した場合「png」で入稿し直してくださいと言われることも多いです。
「イラレのPDF互換」できちんと透過できている場合は、言われません。
「イラレのPDF互換で透過」の難しさを知っている人は、EPSかpngで入稿しています。
なんでイラレはダメなの?
そんな印刷トラブルが多いようです。

次回は、プログラムで、EPS, AIを 自動変換してみます。

php(ImageMagick)で EPS, AI 画像に変換する(その1)

EPS, AI をPHPなどプログラムで変換するときのコツを書きます。

イラストレーター(.ai)
レイヤは、画像ではなくベクトルデータです。
保存の時に「PDF互換」にチェックを入れると、全レイヤを統合した画像データが
一枚目のレイヤとして保存されます。
この一枚のレイヤのみが、印刷に使用されます。
(イラレでしか見れない他のレイヤは無意味ということです)

フォトショップ(.eps)
各レイヤが画像ですので、レイヤごとに一枚の画像ファイルとして出力されます。
レイヤごとに、印刷に使用されます。

みなさんお気づきと思いますが(←そんなこと、知ってるよという人がほとんどだと思います)
↓イラレは画像処理ソフトではないのです。PDF互換の一枚のレイヤ画像のみが利用されます。
http://d.hatena.ne.jp/akane_neko/20130418/1366236806

印刷屋さんが扱う場合も、プログラムで自動処理を行う場合も
全く同じことができます。

印刷屋さんも(.ai)のソフト上で透過していても
『イラレの「PDF互換」で透過』していないものは、透過しないまま印刷されます。
(当然です)

次は、もう少し具体的に説明します。

GDでサムネイルを生成する

まだ整理していません。下書きです。

// 画像フォルダ、※ 相対パス か DOCUMENT_ROOT で書く
$img_dir = '../img/upload/';
echo '
$img_dir=>'.$img_dir;

$name = explode('.', $_GET[imgname]);

$tumbnail_name = $name[0].'_thumbnail.'.$name[1];

$img_path = $img_dir.$tumbnail_name;
echo '
$img_path=>'.$img_path;

// 試験の場合は、前回生成の新画像を削除
// unlink($img_path);

if(!file_exists($img_path)){
echo '
Tumbnailが無いので自動生成します。';

// 注意
// 画像Pathは URLではなく Pathで書く。

// 元画像
$srcname = explode('_thumbnail', $img_path);
$srcname  = $srcname[0].$srcname[1];
echo '

$srcname=>'.$srcname;

$image = ImageCreateFromJPEG($srcname);
echo '
$image=>'.$image;
// 元画像のサイズを取得
$width = ImageSX($image);
$height = ImageSY($image);
echo '
$width=>'.$width;
echo '
$height=>'.$height;

// 縮小した画像のサイズを決める。
$new_width = 250;
$rate = $new_width / $width; //圧縮比
$new_height = $rate * $height;
echo '

$new_width=>'.$new_width;
echo '
$new_height=>'.$new_height;

// 空の画像を作成する。
$new_img = ImageCreateTrueColor($new_width, $new_height);

// 画像を普通にリサイズコピーする場合。
// ImageCopyResized($img_path,$image,0,0,0,0,$new_width,$new_height,$width,$height);
ImageCopyResized($new_img,$image,0,0,0,0,$new_width,$new_height,$width,$height);
// サンプリングしなおす場合。
// ImageCopyResampled($new_img,$image,0,0,0,0,$new_width,$new_height,$width,$height);

// ファイルに保存する場合。
ImageJPEG($new_img, $img_path, 100); //3つ目の引数はクオリティー(0~100)
// ImageGIF($image, $file_path);//環境によっては使えない
// ImagePNG($image, $file_path);
}
echo '<hr /><img src="'.$img_path.'" alt="" />';

※ PHP のGD関数はまだまだ途上のようです。随時使用が変わりますので、人の書いたものを信用せずに、公式サイトをご確認ください。

 

画像サイズを取得してW:Hの最大値を調整する

画そうのサイズを取得する。
このとき画像のPathに注意が必要です。
SERVER_ROOT ではなく、DOCUMENT_ROOT で指定しましょう。

list($width, $height, $type, $attr) = getimagesize($_SERVER[DOCUMENT_ROOT]."/upload/save_image/".$item4[main_image].".jpg");
echo 'W:'.$width.' H:'.$height.'<br>';

画像の最大サイズを調整する。

$wid_max = '450';
$hei_max = '450';
if($width >= $height){
	if($width <= $wid_max){
		$html_size = ' width="'.$width.'"';
	}else{
		$html_size = ' width="'.$wid_max.'"';
	}
}else{
	if($height <= $hei_max){
		$html_size = ' height="'.$height.'"';
	}else{
		$html_size = ' height="'.$hti_max.'"';
	}
}

$img_html = '<img src="/upload/save_image/'.$item4&#91;comment6&#93;.'.jpg"'.$html_size.'>';
echo $img_html; 

GDでサムネイル生成

&lt;?php

$dir  = 'test/';     //画像格納フォルダ
$file = 'test.png';  //画像ファイル名
$max  = 200;         //サムネイルのサイズ

if (preg_match('/\.gif$/i', $file)) {
    $image = imagecreatefromgif($dir . $file);
} elseif (preg_match('/\.(jpeg|jpg|jpe)$/i', $file)) {
    $image = imagecreatefromjpeg($dir . $file);
} elseif (preg_match('/\.png$/i', $file)) {
    $image = imagecreatefrompng($dir . $file);
}

$width  = imagesx($image);
$height = imagesy($image);

if ($width > $height) {
    if ($width > $max) {
    $new_width  = $max;
    $new_height = ($new_width / $width) * $height;
    } else {
    $new_width  = $width;
    $new_height = $height;
    }
} else {
    if ($height > $max) {
    $new_height = $max;
    $new_width  = ($new_height / $height) * $width;
    } else {
    $new_width  = $width;
    $new_height = $height;
    }
}

$new_image = imagecreatetruecolor($new_width, $new_height);

imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);      //アンチエイリアスなし
//imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);  //アンチエイリアスあり

if (preg_match('/\.gif$/i', $file)) {
    imagegif($new_image, $dir . 'copy_of_' . $file);
} elseif (preg_match('/\.(jpeg|jpg|jpe)$/i', $file)) {
    imagejpeg($new_image, $dir . 'copy_of_' . $file, 70);
} elseif (preg_match('/\.png$/i', $file)) {
    imagepng($new_image, $dir . 'copy_of_' . $file);
}

imagedestroy($image);
imagedestroy($new_image);

?&gt;

[/php]

文字を画像化する(Imagemagick)

当然のことですが、日本語を利用する場合、日本語対応フォントを利用します。

$text="あいうえおかきくけこ";
$org_fname="`元ファイル名";
$new_fname="新ファイル名";
$fontsize="30";
$x="40";
$y="270";
$color="white";

// 必要ならエンコード
//$text = mb_convert_encoding($text, 'UTF-8','auto');

$cmd = "convert -fill ".$color." -font kochi-gothic-subst.ttf -pointsize ".$fontsize." -annotate +".$x."+".$y." ".$text." img/".$org_fname." img/".$new_fname;

exec($cmd);

※ 元画像の指定位置に文字画像をのせます。

PHP でモンタージュ作成

Imagemagick の montage関数 を利用します。

複数の画像から複数画像のサムネイルを一つの画像として作成する。
$cmd=”montage -geometry 40×40+5+5 -tile 3×3 -background #ffffff -bordercolor #BBBBBB -border 2 -quality 75 ./ディレクトリ/*.jpg ./ディレクトリ/新ファイル名;

exec($cmd);

さらにトリミングする場合
$cmd=’montage -tile 2×3 -resize 160x -resize “x250<" -resize 50%% -gravity center -crop 105x105+0+0 -geometry 105x105+1+1 -background "#000000" -bordercolor "#BBBBBB" -border 0 -quality 100 ./ディレクトリ/*.jpg ./ディレクトリ/新ファイル名; exec($cmd); 解説 -resize 高さが指定値を超えているもののみ『比率を保持したまま高さを指定値』へ縮小する -resize 50%%で半分の大きさに縮小する -gravity centerで画像を中央に寄せる -crop 70x70+0+0で中央部分を切り抜き -geometry 70x70+10+10で70x70の土台にのせる