質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

590閲覧

php Exifを利用しJPEGアップロード時の画像が横になるのを防ぎサムネイルを作成したい

amaguri

総合スコア227

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/09/28 07:54

やりたいこと
jpeg画像をアップロード時に画像が横になるのを防ぎサムネイル表示作成したい。

調べたこと
参考サイト

環境
Fuelphp1.7.0

現状
if ($mimeTypeCode == 2 ) {}
の処理を走らせない場合は問題なく動くのですが
if ($mimeTypeCode == 2 ) {}内の画像の回転を行うとうまくいかなくなってしまいます。

Orientationの取得までは問題なくできており
if($orientation == 0) {}
if($orientation == 1) {}
の何も処理が走らない場合にはうまくいきますが
それ以外の回転処理が走るものの時うまくいきません。
どうすれば
画像の回転を防ぎサムネイルを作成できますでしょうか?

使用可能拡張モジュール(追加はできません)

array(57) { [0]=> string(4) "Core" [1]=> string(4) "date" [2]=> string(4) "ereg" [3]=> string(6) "libxml" [4]=> string(7) "openssl" [5]=> string(4) "pcre" [6]=> string(7) "sqlite3" [7]=> string(4) "zlib" [8]=> string(6) "bcmath"[9]=> string(3) "bz2" [10]=> string(8) "calendar" [11]=> string(5) "ctype" [12]=> string(4) "curl" [13]=> string(3) "dba" [14]=> string(3) "dom" [15]=> string(4) "hash" [16]=> string(8) "fileinfo" [17]=> string(6) "filter" [18]=> string(3) "ftp" [19]=> string(2) "gd" [20]=> string(3) "SPL" [21]=> string(5) "iconv" [22]=> string(4) "json" [23]=> string(4) "ldap" [24]=> string(8) "mbstring" [25]=> string(7) "session" [26]=> string(8) "standard" [27]=> string(7) "mysqlnd" [28]=> string(6) "mysqli" [29]=> string(3) "PDO" [30]=> string(9) "pdo_mysql" [31]=> string(9) "pdo_pgsql" [32]=> string(10) "pdo_sqlite" [33]=> string(5) "pgsql" [34]=> string(4) "Phar" [35]=> string(5) "posix" [36]=> string(10) "Reflection" [37]=> string(5) "mysql" [38]=> string(5) "shmop" [39]=> string(9) "SimpleXML" [40]=> string(4) "snmp" [41]=> string(4) "soap" [42]=> string(7) "sockets" [43]=> string(4) "exif" [44]=> string(7) "sysvmsg" [45]=> string(7) "sysvsem" [46]=> string(7) "sysvshm" [47]=> string(4) "tidy" [48]=> string(9) "tokenizer" [49]=> string(4) "wddx" [50]=> string(3) "xml" [51]=> string(9) "xmlreader" [52]=> string(6) "xmlrpc" [53]=> string(9) "xmlwriter" [54]=> string(3) "xsl" [55]=> string(3) "zip" [56]=> string(14) "apache2handler" }

現在のコード

public function action_add(){ $mimeTypeCode = @exif_imagetype($_FILES['file']['tmp_name']); $image = $_FILES["file"]["tmp_name"]; if ($mimeTypeCode == 2 ) { $output = $image = $_FILES["file"]["tmp_name"]; $exif = exif_read_data($_FILES["file"]["tmp_name"], 0, true); if (!empty($exif["IFD0"]["Orientation"])) { $orientation = $exif["IFD0"]["Orientation"]; if($image) { // 未定義 if($orientation == 0) { // 通常 }else if($orientation == 1) { // 左右反転 }else if($orientation == 2) { $image = self::image_flop($image); // 180°回転 }else if($orientation == 3) { $image = self::image_rotate($image, 180, 0); // 上下反転 }else if($orientation == 4) { $image = self::image_flip($image); // 反時計回りに90°回転 上下反転 }else if($orientation == 5) { $image = self::image_rotate($image, 90, 0); $image = self::image_flip($image); // 反時計回りに270°回転 }else if($orientation == 6) { $image = self::image_rotate($image, 270, 0); // 反時計回りに270°回転 上下反転 }else if($orientation == 7) { $image = self::image_rotate($image, 270, 0); $image = self::image_flip($image); // 反時計回りに90°回転 }else if($orientation == 8) { $image = self::mage_rotate($image, 90, 0); } } } } // 作成したサムネイルデータを取得してbase64エンコード $imageFile = @base64_encode(@file_get_contents($image)); $mimeTypeStr = @image_type_to_mime_type($mimeTypeCode); //----------------------------------- // 画像の左右反転 //----------------------------------- public function image_flop($image){ // 画像の幅を取得 $w = imagesx($image); // 画像の高さを取得 $h = imagesy($image); // 変換後の画像の生成(元の画像と同じサイズ) $destImage = @imagecreatetruecolor($w,$h); // 逆側から色を取得 for($i=($w-1);$i>=0;$i--){ for($j=0;$j<$h;$j++){ $color_index = imagecolorat($image,$i,$j); $colors = imagecolorsforindex($image,$color_index); imagesetpixel($destImage,abs($i-$w+1),$j,imagecolorallocate($destImage,$colors["red"],$colors["green"],$colors["blue"])); } } return $destImage; } //----------------------------------- //上下反転 //----------------------------------- public function image_flip($image){ // 画像の幅を取得 $w = imagesx($image); // 画像の高さを取得 $h = imagesy($image); // 変換後の画像の生成(元の画像と同じサイズ) $destImage = @imagecreatetruecolor($w,$h); // 逆側から色を取得 for($i=0;$i<$w;$i++){ for($j=($h-1);$j>=0;$j--){ $color_index = imagecolorat($image,$i,$j); $colors = imagecolorsforindex($image,$color_index); imagesetpixel($destImage,$i,abs($j-$h+1),imagecolorallocate($destImage,$colors["red"],$colors["green"],$colors["blue"])); } } return $destImage; } //----------------------------------- // 画像を回転 //----------------------------------- public function image_rotate($image, $angle, $bgd_color){ return imagerotate($image, $angle, $bgd_color, 0); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ざっとコードを拝見したところ、

$output = $image = $_FILES["file"]["tmp_name"];

としておいて

$image = self::image_flop($image);

などとしているのはまずくないですか?
image_flop()などの関数はイメージを受け取る前提で作られているようですので、中身がファイル名の$imageを渡してはうまくいかないはずです。

PHP

1$image = imagecreatefromjpeg($_FILES["file"]["tmp_name"]); 2

としてみてください。

投稿2017/10/05 18:05

編集2017/10/05 18:10
KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問