著作権情報やその他の情報を含む 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);
}
}