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」フォルダーはパブリックデータフォルダー内にあり、ファイル権限はOKである必要があります。画像キャッシュをフラッシュしようとしましたが(drupal image-flush foo-thumb)、それでも結果はありません。

何か案は?

回答:


22

送信元:https : //drupal.org/drupal-7.20-release-notes

さらに、標準のimage_style_url()API関数を使用せずにプログラムによって画像派生物へのリンクを生成するコードは、必要なトークンがURL。

代わりに、次のようなことができます。

$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はありませんか?すなわち:if($ success){$ new_image_url = file_create_url($ derivative_uri); }
stefgosselin 2013年

3
変数の小さな更新は配列である必要がimage_style_create_derivativeあり$styleます$style = image_style_load('my_style');
Victor Lazov

私が合格する答え編集した$styleもののimage_style_load()に渡す前に、image_style_create_derivative()あたりとしてドキュメントを
Felix Eve

file_create_url($ derivative_uri);を除くすべてがこれで機能しました。私にとってはうまくいきませんでした。うまくいったのは、それを(最後の行で)image_style_url($ style、$ image_uri)に置き換えることでした。
マーク

file_create_urlのこのメソッドは、画像スタイルを適用しません。別の画像スタイルを適用するソリューションを見つけました。本当に奇妙です。
ヘンリー、

7

よくある間違いの1つは、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

パブリックファイルシステムのパスが間違っていました。


1

別のオプションは、theme関数を使用することです。

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

ここではhtmlを作成するためにURLを使用できます


0

あなたが持っていることを確認しfoo-thumbたスタイルを、あなたはでチェックすることができますadmin/config/media/image-styles

最初のパラメータimage_style_urlあるスタイル名ではなく、フォルダ名。


スタイルが存在し、フォルダ名は私の場合のスタイル名と同じです。
Bart

エラー404が発生した場合は、メニューが存在しないことを意味します。あなたのすべての画像スタイルにこの問題があると思います。Drupalのバージョンと情報について詳しく説明してください。-どのWebサーバーを使用していますか?-クリーンURL設定は正しいですか?
サンルタン2011

メニューが存在しないかどうかはわかりませんが、ファイルは確かに存在しません。返されたURLはほぼ正しいようですが、サーバーのフォルダーを確認すると、画像がありません。ただし、Drupal( 'foo-thumb')によって作成されたフォルダーはそこにあります。クリーンなURLでApache 2.2を実行すると、すべて正常に動作しているようです。
Bart

画像生成リンクが見つかりませんでした。.htaccessファイルをチェックして行を確認できますErrorDocument 404 /index.phpか?ドメインの上でDrupalを実行していますか?他の試みは、imagemagickツールキットをインストールすることですが、phpのイメージレンダリングによる問題ではないようです。
ル・タン・サン

0

画像を表示しようとしたときに404を受け取った場合は、画像のスタイル名が正しくない可能性があります。私の場合、Image Stylesに表示されたスタイル名は、スタイル名のマシン名ではありませんでした。スタイルにカーソルを合わせると、URLにスタイル名のマシン名が表示されます。マシン名に変更するか、現在のものを削除して、必要な名前で再作成してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.