Встраивание IPTC в изображение в PHP с помощью GD - PullRequest
1 голос
/ 01 апреля 2011

Я пытаюсь сделать фотографию и создать миниатюру, не теряя информацию IPTC, которая содержит информацию об авторских правах и другую информацию.Я пишу сценарии, используя GD для изменения размера, что, конечно, приводит к потере данных IPTC, так как он создает новый файл целиком, а не изменяет размер оригинала.Поэтому я решил извлечь данные IPTC из исходного изображения, а затем вставить их в эскиз.На данный момент все работает нормально, и создается миниатюра, за исключением того, что данные IPTC не копируются.Мой фрагмент кода ниже.Кто-нибудь может увидеть что-нибудь, что мне не хватает?Это основано на примерах из руководства по PHP для iptcembed ().О, да, я работаю в Zend Framework, но кроме Реестра для обработки конфигурации, это довольно простой код ООП.Спасибо!

        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); 
            }

    }

1 Ответ

0 голосов
/ 09 апреля 2011

Я думаю, что iptcembed автоматически сохраняет файл, что означает, что пример руководства php.net неверен:

Возвращаемые значения Если флаг успешности и спула меньше 2, тогда JPEG не будетвозвращается как строка, FALSE при ошибках.

См. http://php.net/iptcembed

...