image_style_url不创建图像[关闭]


11

我正在使用image_style_url来获取通过管理员界面添加的图片的缩略图。

// $foo->field_picture['und'][0]['uri'] has value public://foo.jpg
image_style_url('foo-thumb', $foo->field_picture['und'][0]['uri']);

API指出当请求URL时将创建图像。但是,当访问页面时,不会显示图像(404)。从该函数返回的URL格式似乎正确,但是尚未创建文件。

“ foo-thumb”文件夹位于公共数据文件夹中,并且文件许可权应该确定。我尝试刷新图像缓存(drupal image-flush foo-thumb),但仍然没有结果。

有任何想法吗?

Answers:


22

来自:https : //drupal.org/drupal-7.20-release-notes

此外,如果文件中不存在该图像,则任何不使用标准image_style_url()API函数以编程方式生成图像派生链接的代码将不再正常工作,因为必需的令牌将不存在于文件系统中。网址。

相反,您可以执行以下操作:

$image_uri      = $node->field_image[LANGUAGE_NONE][0]['uri']; // or any public://my_image
$style          = 'my_style';
$derivative_uri = image_style_url ($style, $image_uri);
$success        = file_exists($derivative_uri) || image_style_create_derivative(image_style_load($style), $image_uri, $derivative_uri);

$new_image_url  = file_create_url($derivative_uri);

2
应该没有结尾吗?例如:if($ success){$ new_image_url = file_create_url($ derivative_uri); }
stefgosselin

3
对于一个小更新image_style_create_derivative$style变量应该是阵列$style = image_style_load('my_style');
维克多Lazov

我已经编辑了答案传递$style,虽然image_style_load()经过之前image_style_create_derivative()按该文档
菲利克斯·夏娃

一切都在此工作,除了file_create_url($ derivative_uri); 没有为我工作。所做的工作是在最后一行用image_style_url($ style,$ image_uri);代替。
标记

file_create_url的此方法不适用于图像样式。我找到了一种应用其他图像样式的解决方案。真的很奇怪
亨利

7

一个常见的错误是URI的格式不正确。检查您的URI参数是否以开头public://

不良做法

$imageUrl = image_style_url('style_name', 'myimage.jpg');
$imageUrl = image_style_url('style_name', $node->field_x[$node->language][0]['filename']);

这会将URL输出到样式化图像(带有图像标记),但是如果以前没有生成样式化图像,则不会生成样式化图像。


良好作法

$imageUrl = image_style_url('style_name', file_build_uri('myimage.jpg')); // changes to 'public://myimage.jpg'
$imageUrl = image_style_url('style_name', $node->field_x[$node->language][0]['uri']);

像上面一样,这会输出样式化的URL,如果不存在样式化的图像,则会生成样式化的图像。



1

另一种选择是使用主题功能。

$img = theme('image_style', array('style_name' => 'your_image_style_machine_name', 'path' => $node->field_image['und'][0]['uri']));

而不是返回URL,它将返回img的html。


1
$fid = file_load($field_yuorfield_fid);          
$image_uri = image_style_url('yuor_style', $fid->uri);
fopen($image_uri, 'r');

这里可以使用url创建html


0

确保您有foo-thumb风格,可以在查看admin/config/media/image-styles

image_style_url的第一个参数是样式名称,而不是文件夹名称。


样式存在,文件夹名称与我的情况下的样式名称相同。
巴特

如果出现错误404,则表示菜单不存在。我认为您所有的图像样式都有此问题。您能否详细说明有关您的Drupal版本和信息:-您使用的是哪个Web服务器?-干净的网址设置正确吗?
Sang Le Thanh

我不知道菜单是否不存在,但是文件肯定不存在。返回的URL似乎正确,但是如果我检查服务器上的文件夹,则图像不存在。不过有Drupal创建的文件夹('foo-thumb')。使用干净的URL运行Apache 2.2,一切似乎工作正常。
巴特

我可以看到找不到您的图像生成链接。您可以检查.htaccess文件来检查行ErrorDocument 404 /index.php吗,您是否在域顶部运行Drupal?其他尝试是安装imagemagick工具包,但我看到您的问题不是由php的图像渲染问题。
桑乐清

0

如果尝试查看图像时收到404,则可能是图像样式名称不正确。就我而言,在“图像样式”中显示的样式名称不是该样式名称的机器名称。将鼠标悬停在样式上时,URL将显示样式名称的机器名称。可以将其更改为计算机名称,也可以删除当前名称,然后使用所需名称重新创建。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.