mirror of
https://github.com/won-ktds/smarketing-backend.git
synced 2025-12-06 07:06:24 +00:00
refactor: 이미지 생성 API 변경 (dall-e -> gpt)
This commit is contained in:
parent
53eccb3a2b
commit
61a4837757
@ -173,32 +173,23 @@ class PosterServiceV3:
|
|||||||
example_links = "\n".join([f"- {link}" for link in self.example_images])
|
example_links = "\n".join([f"- {link}" for link in self.example_images])
|
||||||
|
|
||||||
prompt = f"""
|
prompt = f"""
|
||||||
메인 이미지 URL을 참조하여, "글이 없는" 심플한 카페 포스터를 디자인해주세요.
|
메인 이미지 URL을 참조하여, "글이 없는" 심플한 포스터를 디자인해주세요.
|
||||||
|
|
||||||
**핵심 기준 이미지:**
|
**핵심 기준 이미지:**
|
||||||
메인 이미지 URL: {main_image_url}
|
메인 이미지 URL: {main_image_url}
|
||||||
이 이미지 URL에 들어가 이미지를 다운로드 후, 이 이미지를 그대로 반영한 채 홍보 포스터를 디자인해주세요.
|
메인 이미지를 전혀 건들지 말고, 배경만 새로운 홍보 포스터 배경으로 교체해주세요.
|
||||||
심플한 배경이 중요합니다.
|
메인 이미지는 100% 유지해야 합니다.
|
||||||
AI가 생성하지 않은 것처럼 현실적인 요소를 반영해주세요.
|
AI가 생성하지 않은 것처럼 현실적인 요소를 반영해주세요.
|
||||||
|
|
||||||
**절대 필수 조건:**
|
**절대 필수 조건:**
|
||||||
- 어떤 형태의 텍스트, 글자, 문자, 숫자도 절대 포함하지 말 것!!!! - 가장 중요
|
|
||||||
- 위의 메인 이미지를 임의 변경 없이, 포스터의 중심 요소로 포함할 것
|
|
||||||
- 하나의 포스터만 생성해주세요
|
- 하나의 포스터만 생성해주세요
|
||||||
- 메인 이미지의 색감과 분위기를 살려서 심플한 포스터 디자인
|
- 메인 이미지의 색감과 분위기를 살려주세요
|
||||||
|
- {example_links}의 이미지 형태를 참고하여 홍보 포스터 생성
|
||||||
- 메인 이미지가 돋보이도록 배경과 레이아웃 구성
|
- 메인 이미지가 돋보이도록 배경과 레이아웃 구성
|
||||||
- 확실하지도 않은 문자 절대 생성 x
|
- 확실하지도 않은 문자 절대 생성 x
|
||||||
|
|
||||||
**특별 요구사항:**
|
**특별 요구사항:**
|
||||||
{request.requirement}
|
{request.requirement}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**반드시 제외할 요소:**
|
|
||||||
- 모든 형태의 텍스트 (한글, 영어, 숫자, 기호)
|
|
||||||
- 메뉴판, 가격표, 간판
|
|
||||||
- 글자가 적힌 모든 요소
|
|
||||||
- 브랜드 로고나 문자
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return prompt
|
return prompt
|
||||||
|
|||||||
@ -78,19 +78,36 @@ class AIClient:
|
|||||||
raise Exception("OpenAI API 키가 설정되지 않았습니다.")
|
raise Exception("OpenAI API 키가 설정되지 않았습니다.")
|
||||||
|
|
||||||
response = self.openai_client.images.generate(
|
response = self.openai_client.images.generate(
|
||||||
model="dall-e-3",
|
model="gpt-image-1",
|
||||||
prompt=prompt,
|
prompt=prompt,
|
||||||
size="1024x1024",
|
size=size,
|
||||||
quality="hd", # 고품질 설정
|
|
||||||
style="vivid", # 또는 "natural"
|
|
||||||
n=1,
|
n=1,
|
||||||
)
|
)
|
||||||
|
|
||||||
return response.data[0].url
|
# base64를 파일로 저장
|
||||||
|
import base64
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
b64_data = response.data[0].b64_json
|
||||||
|
image_data = base64.b64decode(b64_data)
|
||||||
|
|
||||||
|
# 로컬 파일 저장
|
||||||
|
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
|
||||||
|
filename = f"poster_{timestamp}.png"
|
||||||
|
filepath = os.path.join('uploads', 'temp', filename)
|
||||||
|
|
||||||
|
os.makedirs(os.path.dirname(filepath), exist_ok=True)
|
||||||
|
|
||||||
|
with open(filepath, 'wb') as f:
|
||||||
|
f.write(image_data)
|
||||||
|
|
||||||
|
print(f"✅ 이미지 저장 완료: {filepath}")
|
||||||
|
|
||||||
|
# 그냥 파일 경로만 반환
|
||||||
|
return filepath
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"OpenAI 이미지 생성 실패: {e}")
|
raise Exception(f"이미지 생성 실패: {str(e)}")
|
||||||
raise Exception(f"이미지 생성 중 오류가 발생했습니다: {str(e)}")
|
|
||||||
|
|
||||||
def generate_text(self, prompt: str, max_tokens: int = 1000) -> str:
|
def generate_text(self, prompt: str, max_tokens: int = 1000) -> str:
|
||||||
"""
|
"""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user