function sfpg_image($image_dir, $image_file, $func, $download = FALSE) { $image_path_file = DATA_ROOT . $func . '/' . $image_dir . $image_file; $image_type = sfpg_image_type($image_file); if ($func == 'image') { if (!file_exists($image_path_file)) { $image_path_file = GALLERY_ROOT . $image_dir . $image_file; } if ($download) { header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . $image_file . '"'); } else { header('Content-Type: image/' . $image_type); header('Content-Disposition: filename="' . $image_file . '"'); } readfile($image_path_file); exit; } if ($func == 'thumb' or $func == 'preview') { if (file_exists($image_path_file)) { header('Content-Type: image/' . $image_type); header('Content-Disposition: filename="' . $func . '_' . $image_file . '"'); readfile($image_path_file); exit; } else { if ($func == 'thumb') { $max_width = THUMB_MAX_WIDTH; $max_height = THUMB_MAX_HEIGHT; $enlarge = THUMB_ENLARGE; $jpeg_quality = THUMB_JPEG_QUALITY; $source_img = GALLERY_ROOT . $image_dir . $image_file; } else { $max_width = PREVIEW_MAX_WIDTH; $max_height = PREVIEW_MAX_HEIGHT; $enlarge = PREVIEW_ENLARGE; $jpeg_quality = PREVIEW_JPEG_QUALITY; $source_img = DATA_ROOT . 'image/' . $image_dir . $image_file; if (!file_exists($source_img)) { $source_img = GALLERY_ROOT . $image_dir . $image_file; } } $image_changed = FALSE; if ((MPO_FULL_IMAGE or MPO_STEREO_IMAGE) and sfpg_ext($image_file) == '.mpo' and $func != 'preview') { if (!($image = sfpg_mpo_image($source_img))) { exit; } $image_changed = TRUE; } elseif (!($image = imagecreatefromstring(file_get_contents($source_img)))) { exit; } if ($func == 'thumb' and $image_dir != ICONS_DIR) { sfpg_mkdir(DATA_ROOT . 'info/' . $image_dir); $exif_info = '||||||'; if (function_exists('exif_read_data')) { if (SHOW_EXIF_INFO) { $exif_data = exif_read_data(GALLERY_ROOT . $image_dir . $image_file, 'IFD0'); if ($exif_data !== FALSE) { $exif_info = ''; if (isset($exif_data['DateTimeOriginal'])) { $exif_time = explode(':', str_replace(' ', ':', $exif_data['DateTimeOriginal'])); $exif_info .= date(DATE_FORMAT, mktime($exif_time[3], $exif_time[4], $exif_time[5], $exif_time[1], $exif_time[2], $exif_time[0])); } else { $exif_info .= 'n/a'; } $exif_info .= '|'; $exif_info .= (isset($exif_data['Model']) ? $exif_data['Model'] : 'n/a') . '|'; $exif_info .= (isset($exif_data['ISOSpeedRatings']) ? $exif_data['ISOSpeedRatings'] : 'n/a') . '|'; if (isset($exif_data['ExposureTime'])) { $exif_ExposureTime = create_function('', 'return ' . $exif_data['ExposureTime'] . ';'); $exp_time = $exif_ExposureTime(); if ($exp_time > 0.25) { $exif_info .= $exp_time; } else { $exif_info .= $exif_data['ExposureTime']; } $exif_info .= 's'; } else { $exif_info .= 'n/a'; } $exif_info .= '|'; if (isset($exif_data['FNumber'])) { $exif_FNumber = create_function('', 'return number_format(round(' . $exif_data['FNumber'] . ',1),1);'); $exif_info .= 'f' . $exif_FNumber(); } else { $exif_info .= 'n/a'; } $exif_info .= '|'; if (isset($exif_data['FocalLength'])) { $exif_FocalLength = create_function('', 'return number_format(round(' . $exif_data['FocalLength'] . ',1),1);'); $exif_info .= $exif_FocalLength() . 'mm'; } else { $exif_info .= 'n/a'; } $exif_info .= '|'; if (isset($exif_data['Flash'])) { $exif_info .= $exif_data['Flash'] & 1 ? TEXT_YES : TEXT_NO; } else { $exif_info .= 'n/a'; } } else { $exif_info = 'sfpg_no_exif_data_in_file||||||'; } } if (ROTATE_IMAGES and isset($exif_data['Orientation'])) { $image_width = imagesx($image); $image_height = imagesy($image); switch ($exif_data['Orientation']) { case 2: $rotate = @imagecreatetruecolor($image_width, $image_height); if (LOW_IMAGE_RESAMPLE_QUALITY) { imagecopyresized($rotate, $image, 0, 0, $image_width - 1, 0, $image_width, $image_height, -$image_width, $image_height); } else { imagecopyresampled($rotate, $image, 0, 0, $image_width - 1, 0, $image_width, $image_height, -$image_width, $image_height); } imagedestroy($image); $image_changed = TRUE; break; case 3: $rotate = imagerotate($image, 180, 0); imagedestroy($image); $image_changed = TRUE; break; case 4: $rotate = @imagecreatetruecolor($image_width, $image_height); if (LOW_IMAGE_RESAMPLE_QUALITY) { imagecopyresized($rotate, $image, 0, 0, 0, $image_height - 1, $image_width, $image_height, $image_width, -$image_height); } else { imagecopyresampled($rotate, $image, 0, 0, 0, $image_height - 1, $image_width, $image_height, $image_width, -$image_height); } imagedestroy($image); $image_changed = TRUE; break; case 5: $rotate = imagerotate($image, 270, 0); imagedestroy($image); $image = $rotate; $rotate = @imagecreatetruecolor($image_height, $image_width); if (LOW_IMAGE_RESAMPLE_QUALITY) { imagecopyresized($rotate, $image, 0, 0, 0, $image_width - 1, $image_height, $image_width, $image_height, -$image_width); } else { imagecopyresampled($rotate, $image, 0, 0, 0, $image_width - 1, $image_height, $image_width, $image_height, -$image_width); } $image_changed = TRUE; break; case 6: $rotate = imagerotate($image, 270, 0); imagedestroy($image); $image_changed = TRUE; break; case 7: $rotate = imagerotate($image, 90, 0); imagedestroy($image); $image = $rotate; $rotate = @imagecreatetruecolor($image_height, $image_width); if (LOW_IMAGE_RESAMPLE_QUALITY) { imagecopyresized($rotate, $image, 0, 0, 0, $image_width - 1, $image_height, $image_width, $image_height, -$image_width); } else { imagecopyresampled($rotate, $image, 0, 0, 0, $image_width - 1, $image_height, $image_width, $image_height, -$image_width); } $image_changed = TRUE; break; case 8: $rotate = imagerotate($image, 90, 0); imagedestroy($image); $image_changed = TRUE; break; default: $rotate = $image; } $image = $rotate; } } $iptc_info = '|||||||||||||||||'; if (SHOW_IPTC_INFO) { $only_used_for_iptc = getimagesize(GALLERY_ROOT . $image_dir . $image_file, $info); if (isset($info['APP13'])) { $iptc_info = ''; $iptc = iptcparse($info['APP13']); $iptc_info .= (isset($iptc['2#005']) ? $iptc['2#005'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#010']) ? $iptc['2#010'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#015']) ? $iptc['2#015'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#020']) ? $iptc['2#020'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#040']) ? $iptc['2#040'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#055']) ? $iptc['2#055'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#085']) ? $iptc['2#085'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#090']) ? $iptc['2#090'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#095']) ? $iptc['2#095'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#101']) ? $iptc['2#101'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#103']) ? $iptc['2#103'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#105']) ? $iptc['2#105'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#110']) ? $iptc['2#110'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#115']) ? $iptc['2#115'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#116']) ? $iptc['2#116'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#120']) ? $iptc['2#120'][0] : 'n/a') . '|'; $iptc_info .= (isset($iptc['2#122']) ? $iptc['2#122'][0] : 'n/a') . '|'; } else { $iptc_info = 'sfpg_no_iptc_data_in_file|||||||||||||||||'; } } if (WATERMARK) { $wm_file = GALLERY_ROOT . ICONS_DIR . WATERMARK; if (file_exists($wm_file)) { if ($watermark = imagecreatefromstring(file_get_contents($wm_file))) { $image_width = imagesx($image); $image_height = imagesy($image); $ww = imagesx($watermark); $wh = imagesy($watermark); if (WATERMARK_FRACTION) { if ($image_width < $image_height) { $ww_new = round($image_width * WATERMARK_FRACTION); } else { $ww_new = round($image_height * WATERMARK_FRACTION); } $wh_new = round($wh * ($ww_new / $ww)); } else { $ww_new = $ww; $wh_new = $wh; } imagecopyresampled($image, $watermark, $image_width - $ww_new, $image_height - $wh_new, 0, 0, $ww_new, $wh_new, $ww, $wh); imagedestroy($watermark); $image_changed = TRUE; } } } if ($image_changed) { sfpg_mkdir(DATA_ROOT . 'image/' . $image_dir); $new_full_img = DATA_ROOT . 'image/' . $image_dir . $image_file; if ($image_type == 'jpeg') { imagejpeg($image, $new_full_img, IMAGE_JPEG_QUALITY); } elseif ($image_type == 'png') { imagepng($image, $new_full_img); } elseif ($image_type == 'gif') { imagegif($image, $new_full_img); } } $fp = fopen(DATA_ROOT . 'info/' . $image_dir . $image_file, 'w'); fwrite($fp, date(DATE_FORMAT, filemtime(GALLERY_ROOT . $image_dir . $image_file)) . '|' . sfpg_file_size(filesize(GALLERY_ROOT . $image_dir . $image_file)) . '|' . imagesx($image) . '|' . imagesy($image) . '|' . $exif_info . '|' . $iptc_info); fclose($fp); } list($new_img_width, $new_img_height) = sfpg_aspect_resize(imagesx($image), imagesy($image), $max_width, $max_height, $enlarge); $new_image = imagecreatetruecolor($new_img_width, $new_img_height); if (LOW_IMAGE_RESAMPLE_QUALITY) { imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_img_width, $new_img_height, imagesx($image), imagesy($image)); } else { imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_img_width, $new_img_height, imagesx($image), imagesy($image)); } imagedestroy($image); sfpg_mkdir(DATA_ROOT . $func . '/' . $image_dir); header('Content-type: image/' . $image_type); header('Content-Disposition: filename="' . $func . '_' . $image_file . '"'); if ($image_type == 'jpeg') { imagejpeg($new_image, NULL, $jpeg_quality); imagejpeg($new_image, $image_path_file, $jpeg_quality); } elseif ($image_type == 'png') { imagepng($new_image); imagepng($new_image, $image_path_file); } elseif ($image_type == 'gif') { imagegif($new_image); imagegif($new_image, $image_path_file); } imagedestroy($new_image); } } }
function sfpg_image($image_dir, $image_file, $func, $download = FALSE) { $image_path_file = DATA_ROOT . $func . "/" . $image_dir . $image_file; $image_type = sfpg_image_type($image_path_file); if ($func == "image") { if (!file_exists($image_path_file)) { $image_path_file = GALLERY_ROOT . $image_dir . $image_file; } if ($download) { header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"" . $image_file . "\""); } else { header("Content-Type: image/" . $image_type); header("Content-Disposition: filename=\"" . $image_file . "\""); } readfile($image_path_file); exit; } if ($func == "thumb" or $func == "preview") { if (file_exists($image_path_file)) { header("Content-Type: image/" . $image_type); header("Content-Disposition: filename=\"" . $func . "_" . $image_file . "\""); readfile($image_path_file); exit; } else { if ($func == "thumb") { $max_width = THUMB_MAX_WIDTH; $max_height = THUMB_MAX_HEIGHT; $enlarge = THUMB_ENLARGE; $jpeg_quality = THUMB_JPEG_QUALITY; $source_img = GALLERY_ROOT . $image_dir . $image_file; } else { $max_width = PREVIEW_MAX_WIDTH; $max_height = PREVIEW_MAX_HEIGHT; $enlarge = PREVIEW_ENLARGE; $jpeg_quality = PREVIEW_JPEG_QUALITY; $source_img = DATA_ROOT . "image/" . $image_dir . $image_file; if (!file_exists($source_img)) { $source_img = GALLERY_ROOT . $image_dir . $image_file; } } if (!($image = imagecreatefromstring(file_get_contents($source_img)))) { exit; } if ($func == "thumb" and $image_dir != "_sfpg_icons/") { $image_changed = FALSE; if (!is_dir(DATA_ROOT . "info/" . $image_dir)) { mkdir(DATA_ROOT . "info/" . $image_dir, 0777, TRUE); } $exif_info = ""; if (function_exists("read_exif_data")) { if (SHOW_EXIF_INFO) { $exif_data = exif_read_data(GALLERY_ROOT . $image_dir . $image_file, "IFD0"); if ($exif_data !== FALSE) { $exif_info .= TEXT_EXIF_DATE . ": " . $exif_data["DateTimeOriginal"] . "<br>"; $exif_info .= TEXT_EXIF_CAMERA . ": " . $exif_data["Model"] . "<br>"; $exif_info .= TEXT_EXIF_ISO . ": "; if (isset($exif_data["ISOSpeedRatings"])) { $exif_info .= $exif_data["ISOSpeedRatings"]; } else { $exif_info .= "n/a"; } $exif_info .= "<br>"; $exif_info .= TEXT_EXIF_SHUTTER . ": "; if (isset($exif_data["ExposureTime"])) { $exif_ExposureTime = create_function('', 'return ' . $exif_data["ExposureTime"] . ';'); $exp_time = $exif_ExposureTime(); if ($exp_time > 0.25) { $exif_info .= $exp_time; } else { $exif_info .= $exif_data["ExposureTime"]; } $exif_info .= "s"; } else { $exif_info .= "n/a"; } $exif_info .= "<br>"; $exif_info .= TEXT_EXIF_APERTURE . ": "; if (isset($exif_data["FNumber"])) { $exif_FNumber = create_function('', 'return number_format(round(' . $exif_data["FNumber"] . ',1),1);'); $exif_info .= "f" . $exif_FNumber(); } else { $exif_info .= "n/a"; } $exif_info .= "<br>"; $exif_info .= TEXT_EXIF_FOCAL . ": "; if (isset($exif_data["FocalLength"])) { $exif_FocalLength = create_function('', 'return number_format(round(' . $exif_data["FocalLength"] . ',1),1);'); $exif_info .= $exif_FocalLength(); } else { $exif_info .= "n/a"; } $exif_info .= "mm<br>"; $exif_info .= TEXT_EXIF_FLASH . ": "; if (isset($exif_data["Flash"])) { $exif_info .= $exif_data["Flash"] & 1 ? TEXT_YES : TEXT_NO; } else { $exif_info .= "n/a"; } $exif_info .= "<br>"; } else { $exif_info .= TEXT_EXIF_MISSING . "<br>"; } } if (ROTATE_IMAGES and isset($exif_data["Orientation"])) { $image_width = imagesx($image); $image_height = imagesy($image); switch ($exif_data["Orientation"]) { case 2: $rotate = @imagecreatetruecolor($image_width, $image_height); imagecopyresampled($rotate, $image, 0, 0, $image_width - 1, 0, $image_width, $image_height, -$image_width, $image_height); imagedestroy($image); $image_changed = TRUE; break; case 3: $rotate = imagerotate($image, 180, 0); imagedestroy($image); $image_changed = TRUE; break; case 4: $rotate = @imagecreatetruecolor($image_width, $image_height); imagecopyresampled($rotate, $image, 0, 0, 0, $image_height - 1, $image_width, $image_height, $image_width, -$image_height); imagedestroy($image); $image_changed = TRUE; break; case 5: $rotate = imagerotate($image, 270, 0); imagedestroy($image); $image = $rotate; $rotate = @imagecreatetruecolor($image_height, $image_width); imagecopyresampled($rotate, $image, 0, 0, 0, $image_width - 1, $image_height, $image_width, $image_height, -$image_width); $image_changed = TRUE; break; case 6: $rotate = imagerotate($image, 270, 0); imagedestroy($image); $image_changed = TRUE; break; case 7: $rotate = imagerotate($image, 90, 0); imagedestroy($image); $image = $rotate; $rotate = @imagecreatetruecolor($image_height, $image_width); imagecopyresampled($rotate, $image, 0, 0, 0, $image_width - 1, $image_height, $image_width, $image_height, -$image_width); $image_changed = TRUE; break; case 8: $rotate = imagerotate($image, 90, 0); imagedestroy($image); $image_changed = TRUE; break; default: $rotate = $image; } $image = $rotate; } } if (WATERMARK) { $wm_file = GALLERY_ROOT . "_sfpg_icons/" . WATERMARK; if (file_exists($wm_file)) { if ($watermark = imagecreatefromstring(file_get_contents($wm_file))) { $image_width = imagesx($image); $image_height = imagesy($image); $ww = imagesx($watermark); $wh = imagesy($watermark); imagecopy($image, $watermark, $image_width - $ww, $image_height - $wh, 0, 0, $ww, $wh); imagedestroy($watermark); $image_changed = TRUE; } } } if ($image_changed) { if (!is_dir(DATA_ROOT . "image/" . $image_dir)) { mkdir(DATA_ROOT . "image/" . $image_dir, 0777, TRUE); } $new_full_img = DATA_ROOT . "image/" . $image_dir . $image_file; if ($image_type == "jpeg") { imagejpeg($image, $new_full_img, IMAGE_JPEG_QUALITY); } elseif ($image_type == "png") { imagepng($image, $new_full_img); } elseif ($image_type == "gif") { imagegif($image, $new_full_img); } } $fp = fopen(DATA_ROOT . "info/" . $image_dir . $image_file . ".sfpg", "w"); fwrite($fp, date(DATE_FORMAT, filemtime(GALLERY_ROOT . $image_dir . $image_file)) . "|" . sfpg_file_size(filesize(GALLERY_ROOT . $image_dir . $image_file)) . "|" . imagesx($image) . "|" . imagesy($image) . "|" . $exif_info); fclose($fp); } $image_width = imagesx($image); $image_height = imagesy($image); if ($image_width < $max_width and $image_height < $max_height and !$enlarge) { $new_img_height = $image_height; $new_img_width = $image_width; } else { $aspect_x = $image_width / $max_width; $aspect_y = $image_height / $max_height; if ($aspect_x > $aspect_y) { $new_img_width = $max_width; $new_img_height = $image_height / $aspect_x; } else { $new_img_height = $max_height; $new_img_width = $image_width / $aspect_y; } } $new_image = imagecreatetruecolor($new_img_width, $new_img_height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_img_width, $new_img_height, imagesx($image), imagesy($image)); imagedestroy($image); if (!is_dir(DATA_ROOT . $func . "/" . $image_dir)) { mkdir(DATA_ROOT . $func . "/" . $image_dir, 0777, TRUE); } header("Content-type: image/" . $image_type); header("Content-Disposition: filename=\"" . $func . "_" . $image_file . "\""); if ($image_type == "jpeg") { imagejpeg($new_image, NULL, $jpeg_quality); imagejpeg($new_image, $image_path_file, $jpeg_quality); } elseif ($image_type == "png") { imagepng($new_image); imagepng($new_image, $image_path_file); } elseif ($image_type == "gif") { imagegif($new_image); imagegif($new_image, $image_path_file); } imagedestroy($new_image); } } }