我正在尝试拍照并创建缩略图,而不会丢失包含版权信息和其他信息的 IPTC 信息。我正在使用 GD 编写脚本来调整大小,这当然会导致 IPTC 数据丢失,因为它会创建一个全新的文件,而不是实际调整原始文件的大小。因此,我的解决方案是从原始图像中提取 IPTC 数据,然后将其嵌入缩略图中。到目前为止,一切运行良好,并且生成了缩略图,除了 IPTC 数据没有被复制。我的代码片段如下。谁能看到我错过的任何东西?这是基于 iptcembed() 的 PHP 手册中的示例。哦,是的,我在 Zend 框架中工作,但除了注册表来处理配置之外,这是非常简单的 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);
}
}