image_style_url não cria imagens [fechado]

11

Estou usando o image_style_url para obter uma miniatura de uma imagem que adicionei através da interface do administrador.

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

A API afirma que a imagem será criada quando a URL for solicitada. No entanto, ao visitar a página, a imagem não é exibida (404). O URL retornado da função parece estar bem formado, mas o arquivo não foi criado.

A pasta 'foo-thumb' está na pasta de dados públicos e as permissões do arquivo devem estar OK. Tentei liberar o cache da imagem (drupal image-flush foo-thumb), mas ainda não obtivemos resultados.

Alguma ideia?

Bart
fonte

Respostas:

22

De: https://drupal.org/drupal-7.20-release-notes

Além disso, qualquer código que gere programaticamente um link para um derivado de imagem sem usar a função API image_style_url () padrão não funcionará mais corretamente se a imagem ainda não existir no sistema de arquivos, pois o token necessário não estará presente no arquivo URL.

Em vez disso, você pode fazer algo assim;

$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);
Matthieu Gadrat
fonte
2
Shoud não há um se no final? ou seja: if ($ success) {$ new_image_url = file_create_url ($ derivative_uri); }
stefgosselin
3
Uma pequena atualização para o image_style_create_derivativeda $stylevariável deve ser conjunto$style = image_style_load('my_style');
Victor Lazov
Eu editei a resposta para passar $styleembora image_style_load()antes de passar de image_style_create_derivative()acordo com os documentos .
21715 Felix Eve
Tudo funcionou nisso, exceto aquele file_create_url ($ derivative_uri); não funcionou para mim. O que funcionou foi substituir isso (na última linha) por image_style_url ($ style, $ image_uri);
Mark
Este método de file_create_url não aplica o estilo da imagem. Encontrei uma solução que aplica outro estilo de imagem. Realmente estranho.
Henry
7

Um erro comum é que os URIs não estão formatados corretamente. Verifique se o seu parâmetro URI é prefixado public://.

Má prática

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

Isso gera um URL para a imagem estilizada (com token de imagem), mas não gera uma imagem estilizada quando ela não foi gerada anteriormente.


Boa prática

$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']);

Isso gera um URL estilizado, como o descrito acima, e gera uma imagem estilizada, se não houver nenhuma.

timofey.com
fonte
1

O caminho do sistema de arquivos público estava errado.

Bart
fonte
1

Outra opção é usar a função de tema.

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

Em vez de retornar o URL, ele retornará o html para o img.

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

aqui pode usar url para criar html

Manjericão
fonte
0

Verifique se você tem foo-thumbestilo, você pode conferir em admin/config/media/image-styles.

Os primeiros parâmetros de image_style_url são um nome de estilo , não um nome de pasta .

Sang Le Thanh
fonte
O estilo existe, o nome da pasta é igual ao nome do estilo no meu caso.
Bart
Se você obteve o erro 404, isso significa que o menu não existe. Acho que todos os seus estilos de imagem têm esse problema. Você pode explicar mais sobre a versão e as informações do Drupal: - Qual servidor da web você está usando? - A configuração de URL limpo está correta?
amigos estão dizendo sobre cantina le
Não sei se o menu não existe, mas o arquivo certamente não existe. O URL retornado parece correto, mas se eu verificar minha pasta no servidor, a imagem não estará lá. A pasta criada por Drupal ('foo-thumb') está lá. Executar o Apache 2.2 com URLs limpos e tudo parece estar funcionando bem.
22411 Bart
Eu posso ver que o link para gerar sua imagem não foi encontrado. Você pode verificar o arquivo .htaccess para verificar a linha ErrorDocument 404 /index.php? Você está executando o Drupal na parte superior do seu domínio? Outra tentativa é instalar o imagemagick toolkit, mas vejo que seu problema não é problema pela imagem renderizada do php.
precisa saber é o seguinte
0

Se você receber um 404 ao tentar visualizar a imagem, é possível que o nome do estilo da imagem não esteja correto. No meu caso, o nome do estilo exibido em Estilos de imagem não era o nome da máquina do nome do estilo. Ao passar o mouse sobre o estilo, o URL exibirá o nome da máquina do nome do estilo. Altere-o para o nome da máquina ou exclua a atual e recrie com o nome necessário.


fonte