将外部PHP脚本转换为内部函数

时间:2014-05-09 16:28:17

标签: php image function resize

我有这个简短的外部PHP脚本(名为resize.php),当我想调整大小/缩略图时,我从其他PHP脚本调用它。 我想将脚本更改为内部函数而不是外部PHP脚本,我不知道如何将其转换为可以完成工作的函数。

这就是它的召唤方式:

<img src="resize.php?image=images/IMG228.jpg&amp;width=165" border="0" alt="foo" width="165" height="165" title="">

我想将其更改为函数的主要原因是因为缓存问题,当它是外部php脚本时,如果它已被浏览器调用/加载,则它不会加载它再次,即使服务器上的图像(要调整大小)更新,并且尽管resizer.php本身已经实现了缓存检测和刷新。如果它是内部缩放器功能,我认为这个问题将得到解决。

这是resizer.php脚本:

<?php
if (isset($_GET['image']) && isset($_GET['width']) && is_numeric($_GET['width'])) {
    // Get image name 
    $original_image = $_GET['image'];
    // Watermarks
    $wmark          = 'watermark.png'; //largest watermark
    $wmarkm         = 'watermark_m.png'; //medium watermark
    $wmarks         = 'watermark_s.png'; //smallest watermark
    $wmarkno        = 'nowatermark.png'; //No watermark

    // Maximum image width 
    $max_width  = (int) $_GET['width'];
    // Maximum image height 
    $max_height = "800";

    if (file_exists($original_image)) {
        $cached = 'cache/' . preg_replace('/(\.\w+$)/', ".{$max_width}\\1", $original_image);

        if (file_exists($cached)) {
            $cst = stat($cached);
            $fst = stat($original_image);
            if ($fst[9] <= $cst[9] && $fst[10] <= $cst[10]) {
                if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $cst[9]) {
                    // header("HTTP/1.0 304 Not Modified");
                    header("HTTP/1.1 304 Not Modified");
                    // header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($cached)).' GMT', true, 304);
                } else {

                    header('Content-type: image/jpeg');
                    header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $cst[9]) . ' GMT');
                    header('Cache-Control: private');
                    // print file_get_contents($cached);
                    readfile("{$cached}");
                }
                exit;
            }
        }

        if ($max_width > 300) {
            $watermark = $wmark;
        } elseif ($max_width > 152 && $max_width < 300) {
            $watermark = $wmarkm;
        } elseif ($max_width > 50 && $max_width < 151) {
            $watermark = $wmarks;
        } else {
            $watermark = $wmarkno;
        }

        //create the resized image
        exec("gm convert -filter Lanczos {$original_image} -thumbnail {$max_width}x{$max_height} -quality 90 -unsharp 2x0.5+0.7+0 {$cached}");
        //apply the watermark and recreate the watermarked image, overwriting the previously resized image
        exec("gm composite -quality 90 -dissolve 100 -gravity center {$watermark} {$cached} {$cached}");

        header('Content-type: image/jpeg');
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
        header('Cache-Control: private');
        readfile("{$cached}");
    }
}
?>

1 个答案:

答案 0 :(得分:1)

喜欢这个吗?

<强> img_resize.php

<?php
function resizeImage($image, $width)
{
    if(file_exists('c:/server/path/to/images/folder.'.$image) && ctype_digit($width) && $width >= 1)
    {
        // awesome image resizing code
    }
}
?>

用户将其图片上传到的一些前端脚本:resize.php?

<?php
include_once('c:/path/to/img_resize.php');

resizeImage('user12345_profilepic.jpg', 165);
?>