66165


**現状**  
事前に用意した画像(img.png)を指定している  
index.php

[code]

    <meta property="og:image" content="img.png">
    
[/code]

* * *

**やりたいこと**  
ブログの記事ページ毎に記事タイトルから画像を動的作成して、指定したい  
※テキストから画像を動的作成する手段としては、GDやIMagickを考えています

article/1.php

[code]

    <?php $img = 記事タイトル1(の文字列)から生成した画像パス; ?>
    <meta property="og:image" content="<?php echo $img; ?>">
    
[/code]

article/2.php

[code]

    <?php $img = 記事タイトル2(の文字列)から生成した画像パス; ?>
    <meta property="og:image" content="<?php echo $img; ?>">
    
[/code]

* * *

**分からないこと**  
・事前に画像出力しておいてその画像パスを指定する方法なら何となく想像が付くのですが、「article/1.php」や「article/2.php」へuserがアクセスしてきたタイミングで、(文字列から)画像生成して、そのパスを指定する方法が分かりません

**質問**  
・そもそもやりたいこと(事前に画像生成することなく、userがアクセスしてきたタイミングで動的生成した画像を指定)は可能ですか？  
・出来れば画像をファイル出力せず指定したいのですが、画像は一旦出力する必要はありますか？
画像出力するためには、header処理が必要で、そうすると、他の処理が出来なくなる気がしているのですが…、

**画像を事前になるべく生成したくない理由**  
・これ以外の他の用途では使用予定がないため  
・なるべく容量を抑えたい


CC BY-SA 4.0
2020-04-29T09:49:36.610
66101
2020-05-01T00:06:13.070
7886
question
php twitter 画像
userがWebページへアクセスしてきたタイミングで、文字列から画像を動的生成した上で、Twitterカード画像として指定したい


調べる限りmeta タグのcontentにおいては、imgタグで利用できるbase64encodeした画像を張り付けることは難しそうです。  
そのため「article/2.php」で画像も出力して表示するというのはできなさそうです。

画像パスを出力すると、どうしてもファイルを置かなければならないので、それだとファイルをまた消したりしないといけません。

ただし、例えば動的に出力するスクリプトを用意しておくことで対応は可能そうです。  
例えば  
article/1.php

[code]

    <meta property='og:image' content='decode.php?article=1'/>
    
[/code]

decode.php

[code]

    <?php
    //Getでarticleのidを取得
    $article_id = $_GET['article'];
    //画像を取得しておく$img
    //ここは画像パスではなくて実体です。
    $img = getImage();//なんか画像を取得する処理（中略）
    //画像を出力する
    //※場合によってはheaderとか調整が必要かな？？
    echo($img);
    
[/code]

同じスクリプトで画像の出力は難しいですね。一リクエストで返せるコンテンツは一つなので  
それぞれのリクエストでそれぞれ（htmlとimg）コンテンツを返すようにしています。

一点だけ注意点ですが

> なるべく容量を抑えたい

とありますが、ここでいう容量はサーバのディスク容量かと推測します。  
当たり前ですが、どこかを節約すると何処かに負荷がかかります。今回の場合は毎回画像を生成することになるので、CPUさらに一時的に画像をPHPの変数に入れるのでメモリに負荷がかかります。

一般的にディスクとメモリとCPUであればディスクが最も単価が安く、冗長化や拡張がしやすいです。  
たとえ一か所しか使わないとしても、どこに負荷をかけるかはよく考えたほうがいいです。  
アクセスが多くなるたびにCPUとメモリを消費して画像を生成するぐらいだったら、きっちりディスクを増強してそれに耐えたほうが実際は早くて簡単ということもあります。  
要件に従って考えてみてください。


CC BY-SA 4.0
2020-05-01T00:06:13.070
66165
2020-05-01T00:06:13.070
22665
66101
answer