我写了一个自动创建图片的课程。预览。它的工作方式如下:我们编写的主要应用程序代码中的某处
<img src="<?= Thumbnail::link('/image/uploads/1234567.png', 400, 300, Thumbnal::MODE_CROP) ?>">
并创建一个链接,返回宽度不超过400且高度不超过300像素的缩略图。
您可以在上面看到的这种静态方法link()
除了创建指向缩略图的链接外什么都不做。但那时还没有缩略图。如果它只是像这样的常见链接标签
<a href="<?= Thumbnail::link('/image/uploads/1234567.png', 400, 300, Thumbnal::MODE_CROP) ?>">
点击它时会发生什么: 1.我们去了不存在的URL,正如预期的那样我们得到404.但是在.htacces中我得到了这一行:
ErrorDocument 404 /Thumbnail-resize.php
使Thumbnail-resize.php成为404 hanlder。它的作用基本上是
$brandNewPic = Thumbnail::resize($src, $newWidth, $newHeight, $mode);
} catch (Exception $e) {
echo $e->getTraceAsString();
}
Thumbnail::sendHeader(Thumbnail::$type);
readfile($brandNewPic);
通过静态方法Thumbnail::resize()
创建缩略图
并显示创建的图片。选择此策略是为了确保仅生成一次缩略图,
如果服务器alredy有这个请求的缩略图,我们只是给它一个链接。所以我们不再需要再运行这个缓慢的PHP脚本了。
当我使用标签<a>
并点击它并最终出现在浏览器中的图片时,我使用它时效果非常干净。
但是当我尝试在<img>
标签中直接在页面上显示缩略图时,我失败了,因为显然浏览器如果在响应状态下获得404则不会显示图像。虽然我的缩略图生成脚本已被触发并且缩略图被创建(而且我在响应正文中得到了图片),但我看到的只是替代文字。如果我刷新页面,则会出现图片。但我需要它立即显示,而不是额外的刷新。你能提出什么建议?