PHP动态图像

PHP动态图像,php,codeigniter,Php,Codeigniter,我已经接管了一个CodeIgniter PHP站点,它可以动态生成调整大小的图像和缩略图 以下是站点中生成100px x x 100px缩略图的img标记的示例: <img src="/media/image/ImageName.jpg/100/100" /> 媒体控制器中的映像函数中有一些逻辑,它首先检查缓存文件夹,然后为缓存的映像(如果存在)提供服务 这似乎仍然不是一种优雅的方法,从其他PHP框架(如SilverStripe)的方式来看,最好这样做: echo img_link

我已经接管了一个CodeIgniter PHP站点,它可以动态生成调整大小的图像和缩略图

以下是站点中生成100px x x 100px缩略图的
img
标记的示例:

<img src="/media/image/ImageName.jpg/100/100" />
媒体控制器中的映像函数中有一些逻辑,它首先检查缓存文件夹,然后为缓存的映像(如果存在)提供服务

这似乎仍然不是一种优雅的方法,从其他PHP框架(如SilverStripe)的方式来看,最好这样做:

echo img_link('ImageName.jpg', 100, 100);
助手中的这个新的
img_link
函数将首先检查缓存的图像,并将链接直接写入图像文件,或者生成新图像并将直接链接传递到html

我的想法是,如果PHP使用这种类型的代码为每个
img
提供服务

$this->output->set_content_type('jpeg')->set_output(file_get_contents($file_path));
这将永远是低效的


有人想过吗?

我同意,我已经完全按照你的建议做了(如果链接已经缓存,则直接编写链接),而且效果很好

我唯一能想到的是,如果你的html被缓存,并且你已经删除了缓存的图像,那么到imagefile的直接链接现在就断了

在我的例子中,我从来没有删除过缓存的图像,所以我还没有删除它

我认为这是一个问题的唯一其他情况是,如果你有私人图像。在这种情况下,php需要在显示图像之前先检查谁拥有权限,您不能将缓存文件作为directlink提供,因为人们可以共享该直接链接,安全性将不再适用


如果您确实需要这样做,并且能够在apache上安装模块(假设您使用的是apache),那么有一个模块“x-sendfile”,它将允许您将文件交付过程返回apache,而不是通过php。这适用于php可能超时的大文件,等等

您是否试图保持相同的侧面比例或将图像压缩/拉伸到您输入的任何尺寸?有几种情况。一种是在没有任何用户输入的情况下生成缩略图,另一种是缩略图,用户在其中定义要生成缩略图的大图像区域。
$this->output->set_content_type('jpeg')->set_output(file_get_contents($file_path));