• ベストアンサー

PHPのGDライブラリについて

掲題の件について質問です。 いま、PHPのGDライブラリを用いて大量の既存のイメージファイル(JPEG)から各三種類ほどのサムネイルを作成しているのですが一点問題があります。 既存のイメージを縮小してサムネイルを作成しているのですが、この元となる画像は 解像度72dpiの画像となるのですが、GDを用いて作成されたサムネイルは96dpiの解像度として作成されるのです。 故合ってdpiは72でなければなりません。 このPHPのGDライブラリで画像のDPIの指定は出来ないでしょうか? 識者の方、よろしければご教授ください。 お願い致します。

  • PHP
  • 回答数5
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ざっと検証してみましたが、Exifの問題みたいですね GDの設定もみてみましたがちょっとパラメータがみつからなかったので 厳しいかも、imageMagickに切り替えるのが手っ取り早いでしょう。 書き方の差を吸収するには、前回も書きましたがPEARライブラリを 使うとよいでしょう。 また、Exifの29バイト目あたりからのバイナリデータをいじれば いけそうですが、こればっかりはあまりお勧めはできません。

その他の回答 (4)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.5

php online manual のuser note にdpi 変更法が有ります。 No2回答の方のあまりお薦めしないとあった、バイト列を直接書き換える方法ではありますが、関数にでもしておけば、あとは呼び出すだけですし。 固定で 72 dpi 指定にするなら、元画像のexif を読む必要もないので、これだけでよいのでは? http://jp.php.net/manual/ja/function.imagejpeg.php#83347

回答No.4

はじめまして。 ご期待の回答ではないのですが、phpでサムネイルを作成してみたら、72dpiで作成されたので報告します。 <?php $im = imagecreatefromjpeg("./*****.jpg");       $width0=350; $width = ImageSX($im); $height = ImageSY($im); $new_image0 = ImageCreateTrueColor($width0, $height*($width0/$width)); $new_image1 = ImageCreateTrueColor($width0, $height*($width0/$width)); ImageCopyResized($new_image0,$im,0,0,0,0,$width0,$height*($width0/$width),$width,$height); ImageCopyResampled($new_image1,$im,0,0,0,0,$width0,$height*($width0/$width),$width,$height); imagejpeg($new_image0,"./im0.jpg",0,100); imagejpeg($new_image1,"./im1.jpg",0,100); ?> こんな感じで作成しました。元画像72dpi、作成された画像も72dpiでした。PHOTOSHOPCS5で確認しました。 私のPCはVista32Bit、PHPのバージョンは5.4.0(vc9)、ライブラリはphp_gd2.dllです。 解像度の変更はできないみたいですが、72dpiで作成できれば当面のお役には立てるかなと思いまして…

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ざっと検証してみましたが、Exifの問題みたいですね GDでは厳しいかも、imageMagickに切り替えるのが手っ取り早いでしょう。 差を吸収するには、前回も書きましたがライブラリを使うことになります。 Exifの29バイト目あたりからのバイナリデータをいじれば いけそうですが、あまりお勧めはできません。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

サムネイルにdpiを指定するくだりがよくわからないのですが 縦か横のサイズを指定してjpegを吐き出すのではいけないのでしょうか? サムネイルをつくるだけならPEAR::image-transformあたりが 使いやすかったです。 ただGDよりimagemagicの方がきれいにサムネイルがつくれますね

参考URL:
http://pear.php.net/manual/ja/package.images.image-transform.php
1000vicki
質問者

補足

さっそくのお答えありがおうございます。 要望のあるサムネイルのdpiが72dpiと指定されているのです。 実際に、印刷などする場合をのぞきPC上でdpiは問題ではないですが そういう、条件なので・・・。 GDで作ったサムネイルも画像のプロパテイから概要タブで実際の dpiが確認できるので、確認したところ96dpiとなっていたので・・・。 なんとかして72dpiのサムネイルを作りたいと思っているのです。

関連するQ&A

  • PHPでGDライブラリを使って縮小した画像を直接表示したい

    PHPでGDライブラリを使って、「image.jpg」という画像(800x222のJPEGファイル)を、GETで渡した幅に縮小させたくて、次のように書きました。 -----reimage.php--------------------- <?php header("Content-Type:image/jpeg"); $old_width=800; $old_height=222; $width = htmlspecialchars($_GET['w']); $height = ($old_height / $old_width) * $width; $source = imagecreatefromjpeg("image.jpg"); $re_image = imagecreatetruecolor($width,$height); imagecopyresampled($re_image,$source, 0, 0, 0, 0,$width, $height, $old_width, $old_height); imagejpeg($re_image); imagedestroy($re_image); ?> -------------------------- 他のHTMLファイルから <img src="reimage.php?w=480"> などとすると縮小された画像が表示されるのですが、直接「reimage.php?w=480」を開くと、文字化けした文字列が並んでいるばかりで画像が表示されません。 firefoxでMIMEタイプを見てみると、「text/html」になっています。 >header("Content-Type:image/jpeg"); の部分がうまくいっていないのだと思いましたが、どう直せばいいのか分かりません。 なお、サーバーはxreaの広告免除を使っています。 まだPHPを勉強し始めて日が浅いので、見当違いなことを聞いているかも知れませんが、よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHPのGDでバイキュービックアルゴリズムは使えますか?

    お世話になります。 PHPのGDで、フォームからアップロードした画像ファイルをサーバ上で自動的に縮小しております。 しかし、Photoshop等の画像ソフトの様に滑らかな縮小が出来ません。 Photoshopでは画像の再サンプリングでバイキュービック法を選択して縮小しております。PHPのGDでも同じバイキュービックアルゴリズムを使う事は出来ないのでしょうか?

    • ベストアンサー
    • PHP
  • GDライブラリについて

    いつもお世話になります。PHPで初めて円グラフ作成を行おうと思っているのですが、GDライブラリが旨く組み込まれていません。OSはwindows,PHP Version 4.3.1です。下記項目は行っています。何か足りない点などありましたらお聞かせ下さい。 1. phpiniのphp_gd2.dllのコメントをはずしました。 2. phpiniにextension_dir = c:/php/extensions/   を挿入。 3. GDライブラリをダウンロードしプロジェクトフォルダに展開。・・・・・ 実はこの部分が自信なく、インストールなど何もしていないので果たしてよいのかどうか・・・ 4. phpinfo()で内容を確認していますがgdに関するメッセージは表示されない。 よろしくお願いいたします。 因みにプログラムを実行すると Call to undefined function: imagecreate() in ... のようなメッセージが出力されるので、旨く組み込まれていないのでは無いかと判断しています。

    • ベストアンサー
    • PHP
  • OS10.3 ServerでGDライブラリ

    OS10.3.5 Server + PHPで運用しております。 画像の自動生成を行いたくGDライブラリと、jpeg-6bやlibpngを組み込みたいと思っております。PHPのバージョンは4.2.10(OSの標準搭載)、場合によってはバージョンアップしても構わないと思っております。 サイトを色々さがしても、Server10.3以降のPHPのコンパイル方法がどこも見当たりません。 どなたかServer10.3以降でGDを実装済みの方、ご教授願います。

    • ベストアンサー
    • PHP
  • GDライブラリが使えない・・・

    当方fedora8にてApache2とphp4.4.9にてwebサーバーを構築しております。 Apacheはyumにてphpは4をインストールしたい加減からソースからコンパイルしてインストールしました。 configure時に下記のようにしてインストールしております。 './configure' '--prefix=/usr/local/php-4.4.9' '--enable-mbstring' '--with-apxs2=/usr/sbin/apxs' '--with-pgsql=/usr/local/pgsql' '--with-dg' '--with-zlib' '--with-jpeg-dir' phpinfo()を見ても上記のように設定されております。 しかし、phpinfoにgd関係の表示がされないのですがなぜでしょうか? phpのエラーログにはこうありました。 Warning: Unknown(): Unable to load dynamic library './php_gd2.dll' - ./php_gd2.dll: cannot open shared object file: No such file or directory in Unknown on line 0 php.iniのgd2のコメントアウトは消してあります。 必要なライブラリ関係はyumにてすべてインストール完了しております。 どなたか教えてください。 ではよろしくお願いいたします。

  • PHP GD 画像が縮小できない

    宜しくお願いします。 ※ローカル環境です。 (WinXP PHP5 Smarty PEAR MySQL ※GDはインストされています。) 下記のコードで、サーバーにもともと上げてある画像(jpeg)を縮小して、 それをブラウザに表示させようと思います。 ですが、縮小されずに、元の画像サイズのまま表示されてしまいます。 おかしな点をご指摘下さいませ。 また、(1)で、 jpegファイルを取り込むコードがありますが、これは、 もし画像がGIFであったりPNGの場合を顧慮するなら、 取り込む際にそれぞれを判定するのが基本でしょうか? もし、今回のようにサバー元の画像をリサイズするのであれば、拡張子もわかっていますので、 jpegファイルだけのことを考えればいいですが、 たとえば、任意のアップロードされたファイルを扱う場合は、上記3種類を判定すして処理すべきですよね? 以上、2点を回答下さいませ。 // -- (1) // 画像を読み込む。 $file_path = "http://www元画像.com/img/aa.jpg"; $image = ImageCreateFromJPEG($file_path); //JPEGファイルを読み込む /*********** $image = ImageCreateFromGIF($file_path); //GIFファイルを読み込む $image = ImageCreateFromPNG($file_path); //PNGファイルを読み込む ************/ // -- (2) // 画像のサイズを取得。 $width = ImageSX($image); //横幅(ピクセル) $height = ImageSY($image); //縦幅(ピクセル) // -- (3) // 縮小した画像のサイズを決める。 $new_width = 100; $rate = $new_width/$width; //圧縮比 $new_height = $rate*$height; // -- (4) // 空の画像を作成する。 $new_image = ImageCreateTrueColor($new_width, $new_height); // -- (5) // サンプリングしなおす  ImageCopyResampled($new_image,$image,0,0,0,0,$new_width,$new_height,$width,$height); // -- (6) // ブラウザに出力する場合。 ImageJPEG($image); //ImageJPEG($image,'simpletext.jpg'); //ImageGIF($image); //環境によっては使えない //ImagePNG($image); // -- (7) // メモリを解放する。 imagedestroy ($new_image); imagedestroy ($image);

    • ベストアンサー
    • PHP
  • PHP5で画像の合成(アルファブレンディング)

    はじめまして。 よろしくお願い致します。 PHP5でA画像の上にB画像を合成する際に B画像の透過度を設定してアルファブレンディングしたいと思っています。  ※ 透過GIF/pngのような部分的な透過ではなく、    B画像全体を透明度x%を設定してA画像に重ねる 条件としては、  ・ A、B画像ともにjpegファイル  ・ 可能であればGDライブラリで可能な方法    ※ 無ければ別のイメージライブラリでも結構です。 以上 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHP に gifcat.pl のような画像連結ライブラリはないですか。

    PHP に gifcat.pl のような画像連結ライブラリはないでしょうか。 GDライブラリとかいうのがあるみたい(よく分かってません)ですが、gifcat.pl のように手軽に使えるものはないでしょうか。

    • ベストアンサー
    • PHP
  • [PHP]GDを利用した画像リサイズについて

    [PHP]GDを利用した画像リサイズについて GDを利用した画像リサイズ処理を行うクラスを作ったのですが、 以下のようなエラー(文字化け)が出てしまい画像出力することができません。 有識者の方、どうか知恵をお貸しください。宜しくお願い致します。 ????JFIF??;CREATOR: gd-jpeg v1.0 (using IJG JPEG v70), quality = 75 ??C    $.' ",#(7),01444'9=82<.342??C  2!!22222222222222222222222222222222222222222222222222??II"?? ???}!1AQa"q2???#B??R??$3br? %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??????????????????????????????????????????????????????????????????????????? ???w!1AQaq"2?B???? #3R?br? -------- 以下省略 ---------- ◆作成したPHPファイル ・test.php <?php require_once 'Image.php'; $path = './400x300.jpg'; $r = new Image($path, 75); $r->resize(75); ?> ・Images.php <?php class Image{ var $new_width; var $path; function Image($path, $new_width){ @header("Content-type: image/jpeg"); $this->path = $path; $this->new_width = $new_width; } function resize(){ global $new_width; global $path; // 画像パス $image = imagecreatefromjpeg($this->path); // 画像のサイズを取得 $width = 150; $height = 150; $rate = $this->new_width / $width; $new_height = $rate * $height; $thumb = imagecreatetruecolor($this->new_width, $new_height); imagecopyresized($thumb, $image, 0, 0, 0, 0, $this->new_width, $new_height, $width, $height); // imagecopyresampled($thumb, $image_path, 0, 0, 0, 0, $this->new_width, $new_height, $width, $height); imagejpeg($thumb, null, 75); imagedestroy($image); } } ?> ◆環境と状況 ・サーバ:WindowsXP(XAMPPを利用してローカル環境を構築) ・phpinfo()にて、GD Support=enabled、JPEG Support=enabledを確認 ・ステップ実行(デバック)にてimagejpeg($thumb, null, 75);まで問題なく実行可能。  ※imagejpeg($thumb, null, 75);実行後上記文字列が出力される。 ・コメントアウト個所のimagecopyresampledでも動作結果は同じ。 ・参考にしたサイト  http://goodjob.boy.jp/chirashinoura/id/79.html 恐れ入りますが、ご回答お願い致します。

    • ベストアンサー
    • PHP
  • GDとImageMagick どっちがおすすめ?

    画像をアップする事が出来るシステムを作成したいと思っています そこで調べたところ 私の利用できる環境ではGDライブラリ系の処理もImageMagickを使ったコマンドからの処理も出来るようです 巨大なファイルだったら縮小するくらいにしか使いませんけど、 利用するならどちらを使った方がお得でしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう