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

Drupal 当原始图像不存在时,如何为ImageCache提供默认图像文件以供使用和处理?,drupal,Drupal,有没有办法让ImageCache使用默认图像?或者使用htaccess向imagecache提供默认图像以进行处理?我们的一些客户站点>4GB,处理他们的所有图片是非常痛苦的,我们不需要这些图片进行开发。我尝试过使用htaccess,但ImageCache不处理文件,只是使用了文件维度,从而破坏了布局 有什么想法吗?据我所知,ImageCache对URI的响应类似 http://www.yourdomain.com/default/files/imagecache/set/images/pic.

有没有办法让ImageCache使用默认图像?或者使用htaccess向imagecache提供默认图像以进行处理?我们的一些客户站点>4GB,处理他们的所有图片是非常痛苦的,我们不需要这些图片进行开发。我尝试过使用htaccess,但ImageCache不处理文件,只是使用了文件维度,从而破坏了布局


有什么想法吗?

据我所知,ImageCache对URI的响应类似

http://www.yourdomain.com/default/files/imagecache/set/images/pic.png
其中
http://www.yourdomain.com
是您的域,
文件/imagecache
是imagecache路径,
是预定义的图像处理设置集,其余(此处:
图像/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行启动辅助函数
\u imagecache\u 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;
  };


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

我为此编写了一个模块,因为我也不喜欢使用损坏的布局,我也不喜欢通过拉大文件目录来获得1-10GB+的图像来修复布局

它在主题层上工作,将主题(“imagecache”)和主题(“image_style”)调用封装在一点逻辑中,以检测断开的路径。还可以使用图像格式化程序以及主题函数

适用于Drupal6和7


对于某些服务器配置,为每个映像额外点击文件系统的时间可能会很慢(http://drupal.org/node/908282)因此,imagecache\u默认会持久缓存它在服务器上发现的关于文件的所有内容以及其他一些内容(使用非db缓存实现以获得最佳结果)。

默认图像是什么意思。。。?当一个图像不存在时,它不会退出imageCache,我认为不必处理任何真正不愚蠢的事情!你是说cck imagefield之类的默认图像吗?当图像丢失时,我希望apache提供一个不同的文件供PHP/Drupal/ImageCache处理和服务器启动。Paul,我已经实现了一个htaccess解决方案,但问题是ImageCache不处理该文件。相反,它只是直接通过。我认为这是因为PHP是从文件系统而不是通过Apache访问文件的。我可能只需要直接更改ImageCache。嗨,FadeData,我看到了这个问题,并添加了一个基于PHP的解决方案,请看我上面的帖子。经过测试,效果很好。通过离开看门狗线,它甚至仍然报告丢失的图像。
  // 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';
  };