Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 花を包装する機能の追加とLambda設定の更新 #259

Merged
merged 14 commits into from
Jan 6, 2025

Conversation

AsukaNamiki
Copy link
Collaborator

@AsukaNamiki AsukaNamiki commented Dec 28, 2024

User description

概要

花を包み紙に包んでユーザに見せる機能を追加しました。。

変更点

  • diary_create.pyの修正。花弁を取得する関数を削除。その代わりに一輪の花と包み紙を取得して合成する関数を作成
  • PILライブラリの追加
  • 削除した関数に関するpytestを削除

影響範囲

diary_crate.pyとフロントでのAPI呼び出し部分。

テスト

このセクションでは、この PR に関連するテストケースやテスト方法を記載してください。

  • 新規に追加した画像合成用関数の単体テスト→元画像がある前提で出力が想定の形式か確認。
  • 開発環境にデプロイして日記を書き、期待通りの画像が表示される事を確認
  • テストケース 3

関連 Issue


PR Type

Enhancement


Description

  • flower_wrap関数を追加し、指定されたflower_idの花をランダムな包装紙で包んだ画像を生成する機能を実装しました。
  • 不要な関数を削除し、コードのクリーンアップを行いました。
  • Lambda関数のバンドル設定を更新し、依存関係を管理するための設定を追加しました。
  • 新たに追加した機能に対するテストケースを作成しました。

Changes walkthrough 📝

Relevant files
Configuration changes
diary.ts
Lambda関数のバンドリング設定の追加                                                                         

src/backend/lib/constructs/diary.ts

  • Lambda関数のバンドル設定を追加
  • 依存関係を管理するための設定を更新
+6/-1     
Enhancement
flower.ts
花画像選択用Lambda関数の修正                                                                               

src/backend/lib/constructs/flower.ts

  • 花の画像選択用Lambda関数の定義を修正
  • API設定の追加
+2/-1     
diary_create.py
画像合成機能の追加と不要関数の削除                                                                               

src/backend/lambda/diary_create/diary_create.py

  • 新しい画像合成関数flower_wrapを追加
  • 不要な関数を削除
  • 画像をランダムに選択する関数を追加
+96/-35 
Tests
test_diary_create.py
`flower_wrap`関数のテスト追加                                                                       

src/backend/test/pytest/test_diary_create.py

  • flower_wrap関数のテストを追加
  • 不要なテストを削除
+36/-23 
Dependencies
requirements.txt
依存関係にPillowを追加                                                                                     

requirements.txt

  • Pillowライブラリを追加
+1/-0     
requirements.txt
diary_create用の依存関係追加                                                                         

src/backend/lambda/diary_create/requirements.txt

  • Pillowライブラリを追加
+1/-0     

💡 PR-Agent usage: Comment /help "your question" on any pull request to receive relevant information

@github-actions github-actions bot changed the title Feature/#241 feat: 花を包装する機能の追加とLambda設定の更新 Dec 28, 2024
Copy link
Contributor

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

🎫 Ticket compliance analysis ✅

241 - Fully compliant

Fully compliant requirements:

  • flower_wrap関数を追加し、指定されたflower_idの花をランダムな包装紙で包んだ画像を生成する機能を実装。

Not compliant requirements:

  • なし
⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🔒 No security concerns identified
🔀 Multiple PR themes

Sub-PR theme: 花を包装する機能の追加

Relevant files:

  • src/backend/lambda/diary_create/diary_create.py
  • src/backend/test/pytest/test_diary_create.py

Sub-PR theme: Lambda関数の設定更新

Relevant files:

  • src/backend/lib/constructs/diary.ts
  • src/backend/lib/constructs/flower.ts

⚡ Recommended focus areas for review

Possible Issue

flower_wrap関数内での画像合成処理が正しく行われているか確認する必要があります。

def flower_wrap(flower_id):
    """
    ランダムに選択した包装紙(front/back)で指定flower_idの花を包み、
    base64エンコードした画像を返すPython関数。
    """
    bucket_name = os.environ["FLOWER_IMAGE_BUCKET_NAME"]

    # パレット(背景)を作成
    palette_width = 700
    palette_height = 700
    palette_color = (0, 0, 0, 0)  # 透明背景
    palette = Image.new("RGBA", (palette_width, palette_height), palette_color)

    # 包装紙(front/back)はランダムに選択
    wraper_front = load_random_image_from_s3(bucket_name, "wrapers_front/")
    wraper_back = load_random_image_from_s3(bucket_name, "wrapers_back/")
    # 花画像は固定キー flowers/{flower_id}.png を読み込む想定
    flower_key = f"single_flowers/{flower_id}.png"
    flower = load_random_image_from_s3(bucket_name, flower_key)

    # 包装紙(背面)をパレットに合成
    wraper_position_back = ((palette_width - wraper_back.width) // 2, 75)
    palette.paste(wraper_back, wraper_position_back, wraper_back)

    # 花をパレットに合成(中心揃え)
    flower_position = ((palette_width - flower.width) // 2, 0)
    palette.paste(flower, flower_position, flower)

    # 包装紙(前面)をパレットに合成
    wraper_position_front = ((palette_width - wraper_front.width) // 2, 75)
    palette.paste(wraper_front, wraper_position_front, wraper_front)

    # 画像をBase64にエンコードして戻す
    buffer = BytesIO()
    palette.save(buffer, format="PNG")
    buffer.seek(0)
    encoded_image = base64.b64encode(buffer.read()).decode("utf-8")

    return encoded_image

エラーハンドリングを入れてました

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Copy link
Owner

@Kota8102 Kota8102 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

例外処理を日本語or英語に統一した方がいいかな?

@AsukaNamiki AsukaNamiki merged commit a48fffe into main Jan 6, 2025
4 checks passed
@AsukaNamiki AsukaNamiki deleted the feature/#241 branch January 6, 2025 14:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

一輪の花 + 包装紙 => 花が生成されたときの画像で組わせる lambda を作成
2 participants