如何为ImageCache提供默认图像文件,以便在原始文件不存在时使用和处理?

时间:2010-06-18 22:01:05

标签: drupal

是否可以让ImageCache使用默认图像?或者使用htaccess为imagecache提供默认图像进行处理?我们的一些客户站点大于4GB,处理我们不需要开发的所有图像非常痛苦。我已经尝试过使用htaccess,但是ImageCache不会处理文件,最终会使用文件尺寸来解决布局问题。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

据我所知,ImageCache会响应像

这样的URI
http://www.yourdomain.com/default/files/imagecache/set/images/pic.png

其中http://www.yourdomain.com是您的域,files/imagecache是图像缓存路径,set是预定义的图像处理设置集,其余的(此处:images/pic.png)是原始图像的实际相对路径。

因此,如果pic.png不存在,则应该向ImageCache提供另一个文件(default.png)。针对不存在的文件的.htaccess解决方案可能是:

RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^.]+)\.[gif|jpg|png]$ /images/default.png [L]

现在ImageCache请求images/pic.png不存在并获得images/default.png服务,处理它并将其保存在default/files/imagecache/set/images/pic.png

嗯,至少这是我的理论。

问候,保罗

- ########### -

关于第一条评论的编辑: 好的,我查看了模块。在imagecache.module中,第386行启动辅助函数_imagecache_cache($presetname, $path)。在此函数内检查是否存在原始文件(第403行)。更改此块

  // Check if the path to the file exists.
  if (!is_file($src) && !is_file($src = file_create_path($src))) {
    watchdog('imagecache', '404: Unable to find %image ', array('%image' => $src), WATCHDOG_ERROR);
    header("HTTP/1.0 404 Not Found");
    exit;
  };

  // Check if the path to the file exists.
  if (!is_file($src) && !is_file($src = file_create_path($src))) {
    watchdog('imagecache', '404: Unable to find %image ', array('%image' => $src), WATCHDOG_ERROR);
    /*header("HTTP/1.0 404 Not Found");
    exit;*/
    $src = 'sites/all/modules/imagecache/sample.png';
  };

(注意:我将原始代码行留作注释。您可以将$ src设置为您想要的任何默认文件。)

答案 1 :(得分:0)

我为此写了一个模块,因为我太讨厌使用破坏的布局而且我讨厌拉下巨型文件目录以获得1-10GB +的图像来修复布局。

它通过在一些逻辑中包装主题('imagecache')和主题('image_style')调用来检测损坏的路径,从而在主题层上工作。也适用于图像格式化程序以及主题函数。

http://drupal.org/project/imagecache_defaults

适用于Drupal 6和7。

对于某些服务器配置(http://drupal.org/node/908282),为每个映像多次访问文件系统可能会很慢,因此imagecache_defaults会持久地缓存它发现的有关服务器上的文件以及其他一些内容的所有内容(使用非数据库缓存实现以获得最佳结果。)