[GPT4o,DALL-E 3,PHP] 指定画像と似たような画像を自動生成する

2025/04/11 (金) - 09:00 PHP&CMS

GPT4oで画像の解析や生成がパワーアップして、かなり自然なイラストや画像が出来るようになって「この写真の人物をジブリ風にして!」みたいなことがさらに簡単にできるようになりました。今回はGPTで指定した画像を解析し、さらにその画像に近い画像をDALL-E 3で生成できるようなものをPHPで作ってみました。

猫の生成イメージ

まずchatGPTのAPIのGPT4oのモデルを使って指定した画像の分析を行い、解析結果をもとに生成プロンプトを出力させます。次にAPIのDALL-Eのモデルを使ってプロンプトを元に画像を生成します。

<?php
define('API_KEY', '{GPTのAPIキー}');
define('API_CHAT', 'https://api.openai.com/v1/chat/completions');
define('API_IMG', 'https://api.openai.com/v1/images/generations');
$base_url = '{画像のURL}';
$image_url = '';
function analyzeImage($base_url) {
 $imageData = file_get_contents($base_url);
 $base64Image = base64_encode($imageData);
 $dataUrl = 'data:image/jpeg;base64,' . $base64Image; //画像の形式によって変更
 $headers = [
  'Content-Type: application/json',
  'Authorization: Bearer ' . API_KEY,
 ];
 $data = [
  'model' => 'gpt-4o-mini',
  'messages' => [
   [
    'role' => 'user',
    'content' => [
     [
      'type' => 'text',
      'text' => 'この画像と同じ画像を生成したいので、プロンプトを生成してください'
     ],
     [
      'type' => 'image_url',
      'image_url' => ['url' => $dataUrl]
     ]
    ]
   ]
  ],
  'max_tokens' => 1000,
 ];
 $ch = curl_init(API_CHAT);
 curl_setopt($ch, CURLOPT_POST, true);
 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 $response = curl_exec($ch);
 $responseCode = curl_getinfo($ch,CURLINFO_RESPONSE_CODE);
 curl_close($ch);
 if($responseCode === 200){
  $responseBody = json_decode($response, true);
  $responseMessage = $responseBody['choices'][0]['message']['content'];
  imageGenerator($responseMessage,$base_url);
 }
}
function imageGenerator($prompt,$base_url){
 $headers = [
  'Content-Type: application/json',
  'Authorization: Bearer ' . API_KEY,
 ];
 $data = [
  'model' => 'dall-e-3',
  'prompt' => $prompt,
  'n' => 1, //生成する画像の個数
  'size' => '1024x1024',
 ]
 $ch = curl_init(API_IMG);
 curl_setopt($ch, CURLOPT_POST, true);
 curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 $response = curl_exec($ch);
 $responseCode = curl_getinfo($ch,CURLINFO_RESPONSE_CODE);
 curl_close($ch);
 if($responseCode === 200){
  $result = json_decode($response, true);
  $image_url = $result['data'][0]['url'];
  echo '<p>元画像:<img src="'.$base_url.'" alt="" loading="lazy"></p>';
  echo '<p>生成画像:<img src="'.$image_url.'" alt="" loading="lazy"></p>';
 }
}
analyzeImage($base_url);
?>

画像の解析はURL指定だとうまく行かなかったので、base64にエンコードして指定しました。

コードは汚いけど上記のような感じです。実行すると画像の解析と画像の生成によりすこし待たされますし課金もされるので、生成する個数は少ない方が良いかもしれないです。また正常に解析や生成できなかった場合のエラー処理なども省いています。

人物の生成イメージ

結果については元画像の内容やガチャのようなところもあるので、実際はプロンプトの出力まで行ってからimageFXやStable Diffusionで納得いくまで生成を試した方が効率的かもしれません。

おしまい

タグ:

記事をシェアする

  • facebookでシェアする
  • twitter(X)でシェアする
  • LINEでシェアする
  • はてなブックマークでシェアする
  • Threadsでシェアする
  • Pocketでシェアする
  • Pinterestでシェアする

おすすめ記事

トラックバック & ピンバック

この記事へのトラックバックURI
https://weblog.walk-life.me/dalle3_php_img/trackback/

コメント

コメントは下記からどうぞ

ページの先頭へ