1

著作権情報やその他の情報を含む IPTC 情報を失うことなく、写真を撮ってサムネイルを作成しようとしています。サイズ変更にGDを使用してスクリプトを作成していますが、実際には元のファイルのサイズを変更するのではなく、新しいファイル全体を作成するため、もちろんIPTCデータが失われます。したがって、私の解決策は、元の画像から IPTC データを抽出し、それをサムネイルに埋め込むことでした。現時点では、IPTC データがコピーされないことを除いて、すべてが正常に実行され、サムネイルが生成されます。私のコードスニペットは以下です。私が行方不明になっているものは誰でも見ることができますか? これは PHP マニュアルの iptcembed() の例に基づいています。そうそう、私は Zend Framework 内で作業していますが、構成を処理するためのレジストリは別として、これは非常に単純な OOP コードです。ありがとう!

        public function resizeImage($image, $size)
    {
            // Get Registry
            $galleryConfig = Zend_Registry::get('gallery_config');

            $path = APPLICATION_PATH . $galleryConfig->paths->mediaPath . $image->path . '/';
            $file = $image->filename . '.' . $image->extension;
            $newFilename = $image->filename . '_' . $size . '.' . $image->extension;

            // Get Original Size
            list($width, $height) = getimagesize($path . $file);

            // Check orientation, create scalar
            if($width > $height){
                    $scale = $width / $size;
            }else{
                    $scale = $height / $size;
            }

            // Set Quality
            switch($size){
                    case ($size <= 200):
                            $quality = 60;
                            break;
                    case ($size > 200 && $size <= 600):
                            $quality = 80;
                            break;
                    case ($size > 600):
                            $quality = 100;
                            break;
            }

            // Recalculate new sizes with default ratio
            $new_width = round($width * (1 / $scale));
            $new_height = round($height * (1/ $scale));

            // Resize Original Image
            $imageResized = imagecreatetruecolor($new_width, $new_height);
            $imageTmp     = imagecreatefromjpeg ($path.$file);
            imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

            // Save File
            $complete = imagejpeg($imageResized, $path . $newFilename, $quality);

            // Copy IPTC info into new file
            $imagesize = getImageSize($path . $file, $info); 
            if(isset($info['APP13'])){ 
            $content = iptcembed($info['APP13'], $path . $newFilename); 
               $fw = fopen($path . $newFilename , 'wb'); 
               fwrite($fw, $content); 
               fclose($fw); 
            }

    }
4

1 に答える 1

0

iptcembed は自動的にファイルを保存すると思います。つまり、php.net マニュアルの例は間違っています。

戻り値 成功し、スプール フラグが 2 未満の場合、JPEG は文字列として返されず、エラーの場合は FALSE が返されます。

http://php.net/iptcembedを参照

于 2011-04-09T14:21:23.650 に答える