Я пытаюсь сделать фотографию и создать миниатюру, не теряя информацию 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);
}
}