PHP动态裁剪和缩放图片

3

我有一个网页,其中显示的图片大小我事先不知道。我试图使用GD函数来调整脚本的大小和裁剪图片“仅在它们显示之前..我不需要缓存”,但我失败了。 我需要一个可以这样调用的脚本

<img src="display.php?src=blablabla&height=100&width=200" ?>

甚至可以通过计算CSS的宽度和高度来保持比例,使图像从内部触碰框。

<img src="blabla.jpg" style="height:<?php echo $height; ?>; width:<?php echo width; ?>" />

我不需要任何类型的缓存。我该怎么做?
4个回答

7

WideImage 真是太棒了! :)

调整大小就像这样:

header('Content-type: image/jpeg');

echo WideImage::load('image.jpg')->resize(200, 100)->asString('jpg', 80);
// image.jpg resized at 200x100 with 80% of quality

哇,太棒了!谢谢你!但是如果我想先稍微裁剪一下,让它从内部接触到框(200,100),该怎么办呢?我的意思是,我想让每张图片都是200 x 100,但最小程度地损失细节。 - taabouzeid
2
你可以这样做:echo WideImage::load('image.jpg')->resize(200, 100, 'outside')->crop->('50% - 100', '50% - 50', 200, 100)->asString('jpg', 80); - Thiago Belem
谢谢!我的裁剪/调整大小版本是 WideImage::load($src)->resize($w, $h, 'outside', 'any')->crop('center', 'center', $w, $h)->output('png'); - Edmund Sulzanok

3
你需要使用第一种样式。因为这将在服务器端发生,所以无法检查CSS以获取所需的大小。
你只需要使用GD函数打开适当的文件,使用imagecopyresampled()来调整大小,然后使用imagejpeg>输出到缓冲区。不要忘记设置正确的标头:
header('Content-type: image/jpeg');

1

phpthumb支持缓存吗? - winsmith
看起来它确实支持缓存,根据其介绍,“缩略图可以被缓存以减少服务器负载。任何源图像的多个尺寸可以被单独缓存。当(本地)源图像被修改时,缩略图会自动更新。” - Jay Zeng

-2

您正在寻找TimThumb演示|源代码):

只需将源代码复制到名为“timthumb.php”的新文档中,将其放在站点的文件夹中(例如:/scripts/),然后像这样调用图像:

<img src="/scripts/timthumb.php?src=/images/whatever.jpg&h=150&w=150&zc=1" alt="">

TimThumb是我的问题。我试图调试一个包含timthumb的代码,但它让我发疯了,所以我决定写自己的代码! - taabouzeid
@ta.abouzeid:TimThumb相当容易理解,你想做什么/有什么问题吗? - Alix Axel
检查一下这个主题,http://www.web2feel.com/scarlett-theme/ 它在slide.php文件中使用了timthumb,但并不适用于所有人。 - taabouzeid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接