ホームページ  >  記事  >  php教程  >  GIF と JPEG の両方をサポートするように PHP を構成する

GIF と JPEG の両方をサポートするように PHP を構成する

WBOY
WBOYオリジナル
2016-06-13 12:42:35972ブラウズ

質問: Bluepoint Linux 2.0 をインストールした後、PHP でプログラミングを開始したところ、PHP は GIF 画像のみを処理でき、JPEG 画像は処理できないことがわかりました。後で知ったのですが、PHP は画像処理に GD ライブラリを使用しており、GD ライブラリは当初 GIF をサポートしていましたが、GIF は著作権問題のある LZW アルゴリズムを使用していたため、法的問題が発生するため、GD-1.6 から GD ライブラリはサポートされていませんでした。 GIF のサポートが廃止され、代わりに、より優れた著作権フリーの PNG がサポートされます。そして今度は、GIF、PNG、JPEG を同時にサポートしたいと考えています。試してみたところ、なんとかできました。以下に具体的な方法を紹介します。私の構成は、Bluepoint Linux 2.0、Kernel-2.2.16、MySQL-3.23.10alpha、Apache-1.3.12、PHP4.0.1pl2、gd-1.8.3、Jpeg6bです。





下から上、つまりJpeg->GD->PHP->Apacheの順に紹介していきます。

0. 現在のステータスを確認します。
Bluepoint Linux 2.0 をインストールした後、カーネル、MySQL、および Apache は何も変更されていません。
info.php という名前の PHP ファイルを作成し、Apahce ドキュメント ディレクトリ (/etc/httpd/html) に配置します。その内容は次のとおりです。
ファイルには 1 行しかありません。ブラウザでファイルの URL を開きます (私のホスト名は zhangzh です):
http://zhangzh/info.php
Apache/PHP が正常に実行されている場合は、PHP のバージョンと Apache のバージョンがページにリストされます。など、さまざまな役立つ情報を掲載しています。気になったのは、GDライブラリ部分がGIFとJPEGをサポートしているかどうかでしたが、GIFはサポートしているが、JPEGはサポートしていないことがわかりました。

1. Jpeg6b のインストールと設定
Jpeg の主なファイルには、jpeglib.h、libjpeg.a、libjpeg.so などが含まれます。まず、/usr/include ディレクトリに移動して jpeglib.h があるかどうかを確認し、/usr/lib ディレクトリに移動して libjpeg.a および libjpeg.so があるかどうかを確認します。私のシステムにはそれがないので、インストールする必要があります。
Jpeg ソース コードを取得するアドレスは次のとおりです。
ftp://ftp.uu.net/graphics/jpeg/
取得したファイルは jpegsrc.v6b.tar.gz で、/usr に配置されます。 /src ディレクトリ。
/usr/src ディレクトリに移動し、インストール プロセスを開始します。
Enter /usr/src:
cd /usr/src
圧縮ファイルを解凍します:
tar xzvf jpegsrc.v6b.tar.gz
コマンドが完了すると、追加のサブディレクトリ jpeg-6b には、Jpeg ソース コード ファイルが含まれています。
このサブディレクトリに入ります:
cd jpeg-6b
このディレクトリ内の install.doc ファイルには、Jpeg のインストール方法が詳しく記載されています。指示に従ってください。
Makefile ファイルを設定して生成します:
./configure
コマンドが完了すると、ディレクトリに追加の Makefile ファイルが作成されます。 Makefile は、多くのソフトウェアのコンパイルとインストールに使用される構成およびプロセス制御ファイルです。これは非常に重要であり、その内容を理解する必要があります。
コンパイルを開始します:
make
コマンドが完了すると、ディレクトリにはさらに多くのファイルが存在します。重要なものは libjpeg.a と libjpeg.so です。
インストール:
make install
コマンドが完了すると、jpeglib.h が /usr/local/include ディレクトリにコピーされ、libjpeg.a と libjpeg.so が /usr/local にコピーされます。 /lib ディレクトリ。

2. GD-1.8.3 のインストールと設定
GD の主なファイルには、gd.h、libgd.a などが含まれます。
GD ソース コードを取得するアドレスは次のとおりです。
http://www.boutell.com/gd/
取得したファイルは gd-1.8.3.tar.gz で、 /usr/src ディレクトリ。
このバージョンの GD は GIF をサポートしていないことが知られていますが、よく考えてみると、私と同じように GD が GIF と JPEG の両方をサポートすることを望んでいる人々が多いため、誰かが GIF のサポートを追加するパッチを作成しました。こちらはイギリス人男性のようで、メールアドレスはadam@elysium.ltd.ukです。
パッチのソース コードを取得するアドレスは次のとおりです。
http://www.webofsin.com/gd-1.8.3-gif.patch
取得したファイルは gd-1.8.3-gif です。パッチを /usr/src ディレクトリに置きます。
/usr/src と入力します:
cd /usr/src
圧縮ファイルを解凍します:
tar xzvf gd-1.8.3.tar.gz
コマンドが完了すると、追加のサブディレクトリ gd-1.8.3 には、GD のソース コード ファイルが含まれています。
ソース コードにパッチを適用します:
patch -p0 コマンドが完了すると、gd-1.8.3 サブディレクトリに追加の gd_gif.c ファイルが作成され、ファイル gd.h と Makefile もそれに応じて変更されます。 。
次のサブディレクトリを入力します:
cd gd-1.8.3
デフォルトでは、GD ライブラリにはコンパイル時に JPEG サポートが含まれていないため、Makefile を変更する必要があります。
次のように Makefile を変更します。
CFLAGS=-O -DHAVE_XPM -DHAVE_JPEG -DHAVE_LIBTTF
LIBS=-lm -lgd -lpng -lz -ljpeg -lttf -lXpm -lX11
その後、コンパイルしてインストール:
make
make install
コマンドが完了すると、gd.h が /usr/local/include ディレクトリにコピーされ、libgd.a が /usr/local/lib ディレクトリにコピーされます。 。

3. PHP-4.0.1pl2 のインストールと設定
PHP の主なファイルには、libphp4.a、libphp4.so などが含まれます。
PHP ソース コードを取得するアドレスは次のとおりです。
http://php.net
取得したファイルは php-4.0.1pl2.tar.gz で、/usr/src ディレクトリに配置されます。 。
/usr/src ディレクトリに入り、ファイルを抽出します。
cd /usr/src
tar xzvf php-4.0.1pl2.tar.gz
コマンドが完了すると、追加のファイルが表示されます。サブディレクトリ php-4.0.1pl2 の中に PHP のソースコードファイルがあります。
このサブディレクトリに入ります:
cd php-4.0.1pl2
このディレクトリ内の INSTALL ファイルには、PHP のインストール方法が詳しく記載されています。指示に従ってください。
生成された Makefile を設定します:
./configure --with-apxs=/usr/sbin/apxs' --with-mysql'
'--with-config-file-path=/ etc/ httpd' '--enable-safe-mode'
'--with-system-regex' '--disable-debug'
'--with-zlib' '--enable-track-vars'
'--with-jpeg-dir=/usr/local' '--with-gd=/usr/local'
パラメータの最後の行に注意してください '--with -jpeg-dir=/ usr/local' '--with-gd=/usr/local' は、Jpeg と GD のディレクトリが /usr/local であることを指定します。これは、手順 1 と 2 の make install の結果に基づいて指定されます。
(コマンドが長すぎるため、シェルファイルとして記述して実行することをお勧めします。ファイルmy-php-confの内容は次のとおりです:
#! /bin/sh
./configure --with-apxs=/usr/sbin/apxs' '--with-mysql'
'--with-config-file-path=/etc/httpd' '-enable-safe -mode'
'--with-system-regex ''--disable-debug'
'--with-zlib' '--enable-magic-quotes' '--enable-track-vars' /local' '--with-gd=/usr/local'
シェルを使用して実行します:
sh my-php-conf
効果は同じです)
コマンドが完了したら、このディレクトリに移動します。Makefile がもう 1 つあります。
コンパイルとインストール:
make
make install
コマンドが完了すると、libphp4.so が /usr/lib/apache ディレクトリにコピーされます。

4. Apache の設定
Apache 自体は再コンパイルしてインストールする必要はありませんが、新しい PHP を使用する場合は、Apache 設定ファイルを変更して Apache サービスを再起動する必要があることを Apache に知らせる必要があります。
Apache 設定ファイル /etc/httpd/conf/httpd.conf を変更して、ファイルに次の行が含まれるようにします。
LoadModule php4_modulemodules/libphp4.so
AddModule mod_php4.c
AddTypeapplication/x - httpd-php .php3 .php
同時に、古いphp3の対応する行を必ずコメントアウトしてください。そうしないと、競合が発生し、Apacheの再起動に失敗します。
Apache サービスを再起動します:
/etc/rc.d/init.d/httpd 再起動

5. インスタンスのテスト
ステップ 0 の指示に従って、現在のステータスを再度確認します。を見たところ、PHP は新しいバージョン番号に変更され、GD ライブラリも GIF と JPEG の両方をサポートしました。
しかし、それでもサンプルを使ってテストしたいと思います。このサンプルの機能は、gif ファイルを読み取り、サムネイルを生成し、それを別の jpg ファイルとして保存することです。ファイル create-thumb.php の内容は次のとおりです。
function CreateThumbnail($srcFile, $dstFile, $dstW, $dstH)
{
$data = GetImageSize( $srcFile,& $info);
switch($data[2]){
case 1:
$im =@ImageCreateFromGIF($srcFile);
break;
$im = @ImageCreateFromJPEG($srcFile);
break;
case 3:
$im = @ImageCreateFromPNG($srcFile); im);
if ($srcW <= $dstW && $srcH <= $dstH)
ImageJPEG($im,$dstFile)
{
if(( $srcW / $srcH) > ($dstW / $dstH))
$dstH = $dstW *$srcH / $srcW;
else
$dstW = $dstH *$srcW /$srcH;
$ni=ImageCreate($dstW,$dstH);
ImageCopyResize($ni,$im,0,0,0,0,$dstW, $dstH,$srcW,$srcH); ImageJPEG($ni,$dstFile);
}
}
CreateThumbnail("./test.gif", "./test-tn.jpg", 80, 80)>? ;
このファイルを Apahce のドキュメント ディレクトリ (/etc/httpd/html) に置き、テスト画像ファイル test.gif もこのディレクトリに置き、ブラウザで php ファイルを開きます (私のホスト名は zhangzh です) ):
http://zhangzh/create-thumb.php
エラー メッセージはありません。 Apahce ドキュメント ディレクトリ (/etc/httpd/html) を見ると、追加のサムネイル ファイル test-tn.jpg があります。

終わって、クラスの先生は法廷に戻ります。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。