0

php と mysql を使用して画像ギャラリーを作成し、画像を追加するいくつかの方法と、追加方法やカテゴリで並べ替える機能を組み込みました。Apple デバイスの一部の画像が「間違った」向きで表示されていることに気付いた後、向きやその他のファイル情報を編集する別のページを作成し、その変更をファイルとデータベースに保存しました。この問題を解決したと思った後で、Apple デバイスで変更された画像を表示しましたが、その画像がそのデバイスで「間違った」向きになっていることに気付きました。私はこれをグーグルで調べてきましたが、この状況でAppleデバイスからの画像を処理するために今何を学ぶ必要があるかを正確に理解することはできません. 正しい方向への押し込みは大歓迎です。

ありがとう!

4

2 に答える 2

1

私の "gallery3" フォト ギャラリーでも同じ問題が発生しています。mahouinard のように、私は「jhead -norot filename.jpg」を使用して、画像からオリエンテーション ヘッダーを取り除きます。これにより、Apple の回転の問題が修正され、他のブラウザが台無しになることはないようです。

一連のファイルをその場で編集するには、(gallerytop)/lib/albums のアルバム ストレージ エリアに直接移動し、find -type f | xargs sudo jhead -norot. 変更が必要なファイルのみを変更するのに十分スマートであり、作業中にそれらのリストを標準出力に出力します。

gallery3 にサムネイルを更新させるには、データベースに移動し、次のように「ダーティ」フラグを設定しますecho "update items set thumb_dirty=1,resize_dirty=1 where relative_path_cache like 'ALBUMNAME/%';" | mysql -u root -p gallery3。次に、ギャラリー メンテナンス モードに入り、「イメージの再構築」ユーティリティを実行します。

于 2011-09-06T03:41:13.317 に答える
0

これを投稿したことを忘れていました。オリエンテーションの問題を処理する方法を見つけたので、共有したいと思いました。今はシンプルに見えます。それ以来、Codeigniter を使用してこのプロジェクトを再作成しました。CI は優れており、時間を大幅に節約できますが、初めて自分ですべてを書いてよかったと思っています。私は確かにそのようにもっと学びました。

まず、ファイルが jpg の場合、PELで EXIF データを取得します。

$new向きをチェックするアップロードされたファイルです。

       $this->load->library('pel/PelJpeg');


       if($ext == 'jpg'){
            $pdw= new PelDataWindow(file_get_contents($new));
            if(PelJpeg::isValid($pdw)){
                $input_jpg = new PelJpeg($new);
                $exif = $input_jpg->getExif();
            }
        }

次に、EXIF が存在する場合は、向きの値を取得して switch ステートメントを実行し、それに応じて回転させてから、向きの値をリセットします。私は image_moo と Codeigniter を使用していますが、これは明らかに任意の画像操作ライブラリを使用するように変更できます。

これらすべての IF ステートメントがそこにある必要があるかどうかは正直わかりませんが、EXIF 情報のみを含む jpg で問題が発生し続け、それらがないとスクリプトが壊れてしまいます。

 if($exif !== NULL){
 if($tiff = $exif->getTiff()){
 if($ifd0 = $tiff->getIfd()){
 if($orient = $ifd0->getEntry(PelTag::ORIENTATION)){
 $this->image_moo->load($new);

 //find the orientation value from the orientation tag.  May be a better way, but this works for me.                                    
 $orientation = str_replace(' ', '', $orient);
 //The orientation value from the orientation tag is after 'Value:'
 if (($tmp = strstr($orientation, 'Value:')) !== false) {
      $str = substr($tmp, 6, 1);
 }

 switch ($str)
 {
     // up is pointing to the right
     case 8:
       $this->image_moo->rotate(90);
       $orient->setValue(1);
       break;
     // image is upside-down
     case 3:
       $this->image_moo->rotate(180);
       $orient->setValue(1);
       break;
     // up is pointing to the left
     case 6:
       $this->image_moo->rotate(270);
       $orient->setValue(1);
       break;
     // correct orientation
     case 1:
       break;
       }
     $this->image_moo->save($new,TRUE);
     if ($this->image_moo->errors) print $this->image_moo->display_errors();
     $this->image_moo->clear();
 }
 }
 }
 }

これが同じ問題に苦しんでいる他の誰かに役立つことを願っています. 改善できる点があれば、お知らせください。しかし、これは私にとってはうまくいきます。

マーク

于 2011-12-21T12:00:28.190 に答える