[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 メーリングリストの案内