Image Playground を実装してみる

2024/11/13に公開

Image Playgroundとは

Apple Intelligenceの画像生成機能です。キーワードや説明から画像を生成したり、自分のアルバムから写真や人を使い特定のスタイルに変更することもできます。
Apple Intelligenceとして提供されている機能で唯一開発者がアプリに組み込むことができる機能です。
https://www.apple.com/jp/apple-intelligence/

利用できる環境

ハードウェア

  • A17 ProまたはM1以降を搭載したデバイス
  • iOS/iPadOS 18.2 または macOS 15.2
  • 言語設定が英語(アメリカ)(執筆時時点)
  • Early Accessの申請が必要(執筆時時点)

利用方法

環境
UIKit ImagePlaygroundViewController
SwiftUI View.imagePlaygroundSheet()(本記事で取り扱います)
コード以外 デバイス上のImage Playgrounds.app

実装方法(SwiftUI)

利用できる環境か確認

@Environment(\.supportsImagePlayground) var supportsImagePlayground

@Environment(\.supportsImagePlayground) では画像生成に必要なハードウェア条件が揃っているかをBoolで確認できます。

Sheetを理解

View.imagePlaygroundSheet()はこのように定義されています。

func imagePlaygroundSheet(
    isPresented: Binding<Bool>,
    concept: String, // concepts: [ImagePlaygroundConcept] = [],
    sourceImage: Image? = nil, // sourceImageURL: URL,
    onCompletion: @escaping (URL) -> Void,
    onCancellation: (() -> Void)? = nil
) -> some View

簡単に説明をすると、

コード
concept 画像生成のためのキーワード。conceptsにすることで配列で複数提供
sourceImage 参考・加工をする画像を提供
onCompletion 処理した画像をURLとして返す

実装例

@State var isPresented: Bool = false

var body: some View {
    Button {
        isPresented = true
    } label: {
        Text("Show Playground")
    }
    .imagePlaygroundSheet(isPresented: $isPresented) { url in
        // completion処理を書く  
    }
}

Image Playgroundでを表示したウィンドウ。キーワードsparrowとdisco。

サンプル

https://github.com/yidev0/Image-Playground-Test

参考

https://support.apple.com/ja-jp/121115
https://developer.apple.com/documentation/swiftui/environmentvalues/supportsimageplayground
https://developer.apple.com/documentation/swiftui/view/imageplaygroundsheet(ispresented:concept:sourceimage:oncompletion:oncancellation:)

おまけ

Image Playground用のSFSymbolが2つ(apple.image.playground apple.image.playground.fill)用意されています。Image Playgroundを指すものにのみ使えるので注意してください。
Image Playground用ののSFSymbol2種類と警告文「This symbol may not be modified and may only be used to refer to Apple's Image Playground.」

Discussion