예제 #1
0
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);
        }
    }
}
예제 #2
0
파일: gallerya.php 프로젝트: jukatax/upc
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);
        }
    }
}