我有这个简短的外部PHP脚本(名为resize.php),当我想调整大小/缩略图时,我从其他PHP脚本调用它。 我想将脚本更改为内部函数而不是外部PHP脚本,我不知道如何将其转换为可以完成工作的函数。
这就是它的召唤方式:
<img src="resize.php?image=images/IMG228.jpg&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}");
}
}
?>
答案 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);
?>