- ベストアンサー
PHPの画像処理での表示問題について
- PHPの画像処理で、JPG形式の画像は表示できますが、PNGやGIF形式の画像は表示されません。
- 関連するコードの一部を紹介しますが、何かPNGのためには特別な設定が必要なのでしょうか?
- 詳しい方、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
掲載されているコード自体には問題無いように見受けられます。 掲載されていない部分に問題があるか、PNG用のライブラリがインストールされてない等、他に原因があるのではないでしょうか。
その他の回答 (1)
- okwavey6
- ベストアンサー率17% (99/553)
>PHP学習者です。 カテゴリ [技術者向] コンピュータープログラミング・開発PHP >関係すると思われるコードの一部を掲載します。 関係すると思われるコードはまだわかるとして、なぜ一部にしてしまうのですか? 事情があるなら、それを解決する手段を取ると良いですし、それを質問しても良いと思います。
お礼
早速にご回答を頂き、有難うございます。 一部だけにしたのは、結構大きなコードなので、全部は入りきらないかもと思ったからです。 どの画像形式にも同じ処理をしているのにJPGだけしか結果が出てないというのは、PNGやGIFには何か特別の事をする必要があることを初心者の私が知らないからではないのかと考えたからです。 そう言う訳で画像を発生させている部分だけでいいのかなと思ったのですが、考えが浅かったようです。失礼いたしました。 補足の欄にクラス定義のコードと、それを使うクライアントプログラムを添付します。
補足
directoryitem のクラス定義 <?php class DirectoryItems{ private $fileArray=array(); private $directory; private $replacechar; public function __construct($directory, $replacechar="_") // 全てのプライベート変数を初期化し // 連想配列 $fileArray[] にディレクトリー内のすべてのファイル名を取り込む { $this->directory = $directory; $this->replacechar = $replacechar; $d=""; // resource identifier for directory if(is_dir($directory)){ $d=opendir($directory) or die("cannot open the directory!"); while(false!==($f=readdir($d))){ if(is_file("$directory/$f")){ $title = $this->createTitle($f); $this->fileArray[$f]=$title; // key=$f(file name), value=$title(explanation) of //associative array $fileArray[] } }// end while closedir($d); } else{ // error die("must pass in a directory"); } // end if-else } // end constructor private function createTitle($file) // ファイル名からタイトルを得る、拡張子を除いた部分 { // strip extention $title = substr($file,0, strpos($file,".")); // replace word separator $title = str_replace($this->replacechar, " ", $title); return $title; } public function getFileArray() // $fileArray そのものを得る { return $this->fileArray; } public function indexOrder() // $fileArray[] の要素を並べ替える { sort($this->fileArray); } public function naturalCaseInsensitiveOrder() // $fileArray の要素を並べ替える、大小の文字区別せず { natcasesort($this->fileArray); } public function getCount() // $fileArray[] の要素の数を得る { return count($this->fileArray); } public function checkAllImages() // $fileArray[] の中のファイルが全て画像ファイルかどうかをチェックする { $bln=true; $ext=''; $types=array('jpg','jpeg','gif','png'); foreach($this->fileArray as $key => $value){ $ext=substr($key,(strpos($key,".")+1)); $ext=strtolower($ext); echo "extention=$ext </br>"; if(!in_array($ext, $types)){ $bln=false; break; } // end if } // end foreach } // end function public function checkAllSpecificType($extention) //$fileArray の中のファイルが全て特定の拡張子を持つかどうかチェックする { $extention = strtolower($extention); $bln = true; $ext = ""; foreach($this->fileArray as $key => $value){ $ext = substr($key, strpos($key,".")+1); $ext = strtolower($ext); if($extention != $ext){ $bln = false; break; } } // end foreach return $bln; }// end function public function filter($extention) // $fileArray から特定の拡張子を持つファイルだけを残してあとは全て消去する { $extention = strtolower($extention); foreach($this->fileArray as $key=>$value){ $ext = substr($key, (strpos($key,".")+1)); $ext = strtolower($ext); if($ext != $extention){ unset($this->fileArray[$key]); } } // end foreach }// end function public function removeFilter() //$fileArray を全てのファイルを含む元の状態に戻す { unset($this->fileArray); // the rest of this function is exactly the same as the constructor $d=""; $d=opendir($this->directory) or die("cannot open the directory!"); while(false!==($f=readdir($d))){ if(is_file("$directory/$f")){ $title = createTitle($f); $this->fileArray[$f]=$title; } }// end while closedir($d); } public function imagesOnly() //$fileArray[] に画像ファイルだけを残し、あとは全て削除するフィルター { $ext=""; $types=array("jpeg", "jpg", "gif", "png"); foreach($this->fileArray as $key=>$value){ $ext=substr($key, (strpos($key, ".")+1)); $ext=strtolower($ext); if(!in_array($ext, $types)){ unset($this->fileArray[$key]); } } // end foreach }// end function public function getFileArraySlice($start, $numberitems) { return array_slice($this->fileArray, $start, $numberitems); } } // end class ?> thumbnailimages のクラス定義 <?php class ThumbNailImage{ *** 省略 ***** このクラスも上のものと同じくらい長いですし、このほかにもpagenavigator クラスというのもあって、その上にこれらの3つのクラスを使う自分のクライアントプログラムがあるのですが、これ以上添付するのは無理の様です。何か他にうまい方法はあるでしょうか?
お礼
早い回答、有難うございます。あまりに早いのでびっくりしました。 そうですか、やはりPNGやGIFのためには何か特別のライブラリーのようなものが必要なのでしょうか。ちょっと調べてみます。