[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で納得いくまで生成を試した方が効率的かもしれません。
おしまい♥
おすすめ記事
- microCMS+Next.js で記事検索ページを作る
- さくらのレンタルサーバーでMovable Type(MT)の管理画面がForbiddenになる件
- WordPressのショートコードで他の記事情報を表示する
- Astro + microCMSでOGPタグを設定する(トップ・記事詳細)
- さくらのレンタルサーバーのPHPとSQLiteを使ってみた
トラックバック & ピンバック
- この記事へのトラックバックURI:
- https://weblog.walk-life.me/dalle3_php_img/trackback/