[PHP-users 22500]PHP4.3.7でのgdでのJpeg使用方法(格闘記)

uran uran @ be.to
2004年 7月 5日 (月) 04:08:59 JST


 みなさん、こんにちは。初めてですがuranといいます。画面に表示する
地図の上にマーキングを書きたくて、PHPで試して見ました。PHP4.2.3では
若干問題があるので、新しい4.3.7で確認をしましたのでお知らせします。
過去ログには4.3.7については、なかったような気がします。また、地図
(画像)がPNGであるならば、今回の修正の作業は必要ありません。

#私はPHPの経験は浅いです。他言語は長いですが。


        使用したLinuxの環境は VineLinux2.6r4 です。


[PHP4.2.3(php-4.2.3-multibyte.tar.gzを使用)でのGDの問題点]

・Jpeg画像にimageline()関数で線を描いても、色がうまく反映しない
 線幅を変更することも難しい。
・線幅を変えようとしてimagesetthickness()関数を使用すると、これは
GD2.0.1以上のサポートとなり、動作しない。

 となりうまくありません。したがって新しいphp-4.3.7(tarボールは
php-4.3.7.tar.gz)と格闘してみました。

 このtarを使用しデフォルトでMakeすると、何とJpegの標準サポート
がありません。いままでの過去ログを参考に何度もtryしたのですが、
コンパイルエラーが出たりします。最初にやったのは、phpソースの
ルートで ./configure 後に Makefileに-DHAVE_LIBJPEGを入れる方法
です。しかしこの方法では、jpeg_destory()がないというエラー等が
出ます。

 もともとVine2.6r4には Jpeglib等がインストールされているので
それを利用することにしました。

 まずは、ルートでのconfigureですが、次のようにしました。

./configure --with-apxs=/usr/local/apache/bin/apxs --with-mysql
 --with-gd --with-zlib --with-jpeg-dir=/usr/lib
 --enable-zend-multibyte --enable-mbstring
 --enable-mbstr-enc-trans

 でやってみました。私はMySQLを使用するのでこのような指定になって
います。必要なのは --with-jpeg-dir=/usr/lib でした。ここに
libjpeg.* があります。不要なOptionや、まだ必要なOptionがあるかも
しれませんが今回はJpegサポートという観点なので未チューニングです。

 次に、出来上がるMakefileを修正します。18行目あたりに次のような
記述があります。

GDLIB_CFLAGS = -I/usr/local/src/php-4.3.7/ext/gd/libgd -DHAVE_LIBPNG

これに -DHAVE_LIBJPEGを付加します。過去ログなどには -DJISX0208など
が必要とありますので、必要なら付けても良いかもしれません。ただ、
php-4.3.7なら、基本的にいらないのかも知れません。また過去ログやら
書籍には-DHAVE_JPEGとか-DHAVE_LIBJPG(Eがない)とか書いてあったり
しますが、-DHAVE_LIBJPEGのようです。

 以上で、makeとmake installで何もエラーがでなければOKです。2回目
以降のmake時には事前にmake cleanをした方がよいです。私はロースペック
な機械で作業しているので、makeに時間がかかります。10から20分はかか
ったような気がします(PenII 400MHz)


phpinfo();で確認するとgdのところが次のようになっている筈です。

             gd
GD Support        enabled  
GD Version        bundled (2.0.23 compatible)  
GIF Read Support  enabled  
JPG Support       enabled  
PNG Support       enabled  
WBMP Support      enabled  
XBM Support       enabled  

 JPG Supportがあれば、うまくいっています。

 ということで、休日のひと時を、楽しいコンパイル作業等で費やし
ました。皆さんのご参考になればと思いUpしました。

 一応、マニュアルページを探ってみると

http://www.php.net/manual/ja/ref.image.php

 にJPEGサポートには  jpeg-6b add ⇒  --with-jpeg-dir=DIR.
とありますので、今回の作業は正解だったように思います。またここの
記述を見ると、-DHAVE_LIBJPEGは特に言及していませんが、必要/不要
はわかりません(追試していません)

#しかし、何でjpegを標準でサポートしていないんだろう? 日本人以外
#にはマイナーなんだろうか? 個人的にはWBMPより重要だと思う。
------------------------------------------------------------
|__| |~~~ /::| |~~| mailto:uran @ be.to
浦野雅弘            http://www.mirai.ne.jp/~uran




PHP-users メーリングリストの案内