-
Crie imagens de alta qualidade usando o Image Playground
Possibilite a criação de imagens de alta qualidade no seu app usando o Image Playground. Com um novo modelo generativo em execução na Computação Privada na Nuvem, os usuários podem gerar imagens em praticamente qualquer estilo, inclusive fotorrealista, diretamente no seu app. Você também pode definir dimensões para uso em ainda mais lugares e permitir que os usuários modifiquem imagens usando descrições em linguagem natural e toque. Descubra como adotar o Image Playground, gerar imagens com base em descrições e fotos, e gerenciar a disponibilidade de recursos no seu app.
Capítulos
- 0:00 - Introdução
- 2:03 - Recursos
- 5:02 - Adote o Image Playground
- 8:29 - Opções
- 12:15 - Disponibilidade
Recursos
Vídeos relacionados
WWDC26
WWDC24
-
Buscar neste vídeo...
-
-
5:28 - Adopt Image Playground in SwiftUI
// Adopt Image Playground in SwiftUI func imagePlaygroundSheet( isPresented: Binding<Bool>, concepts: [ImagePlaygroundConcept] = [], sourceImage: Image? = nil, onCompletion: @escaping (URL) -> Void, onCancellation: (() -> Void)? = nil ) -> some View -
5:39 - Add Image Playground sheet with binding to @State
// Adopt Image Playground @State private var showingPlayground = false var body: some View { Button("Create image") { showingPlayground = true } .imagePlaygroundSheet( isPresented: $showingPlayground, onCompletion: { url in var updated = currentCard store.saveImage(url, for: &updated) } ) } -
6:29 - Seeding the sheet with context from your card
// Seeding the sheet with context from your card var concepts: [ImagePlaygroundConcept] { [ .text(card.theme), .extracted(from: card.message, title: card.theme), ] } var body: some View { Button("Create image") { showingPlayground = true } .imagePlaygroundSheet( isPresented: $showingPlayground, concepts: concepts, onCompletion: { url in var updated = card store.saveImage(url, for: &updated) } ) } -
7:11 - Starting from a reference photo
// Starting from a reference photo @State private var sourceImage: Image? var body: some View { Button("Create image") { showingPlayground = true } .imagePlaygroundSheet( isPresented: $showingPlayground, concepts: concepts, sourceImage: sourceImage, onCompletion: { url in var updated = card store.saveImage(url, for: &updated) } ) } -
7:42 - Providing a visual suggestion using a drawing
// Providing a visual suggestion using a drawing @State private var drawing = PKDrawing() var concepts: [ImagePlaygroundConcept] { var result: [ImagePlaygroundConcept] = [ .text(card.theme), .extracted(from: card.message) ] if !drawing.strokes.isEmpty { result.append(.drawing(drawing)) } return result } -
8:06 - Adopt Image Playground in UIKit or AppKit
// Adopt Image Playground in UIKit or AppKit func presentViewController() { let viewController = ImagePlaygroundViewController() viewController.concepts = [ .text(card.theme), .extracted(from: card.message) ] viewController.delegate = self present(viewController, animated: true) } func imagePlaygroundViewController( _ viewController: ImagePlaygroundViewController, didCreateImageAt url: URL ) { var updated = card store.saveImage(url, for: &updated) dismiss(animated: true) } -
9:02 - Size Specification
// Size Specification var options: ImagePlaygroundOptions { var options = ImagePlaygroundOptions() options.sizeSpecification = .closest(to: card.format.size) return options } var body: some View { Button("Create image") { showingPlayground = true } .imagePlaygroundSheet( isPresented: $showingPlayground, concepts: concepts, onCompletion: { url in var updated = card store.saveImage(url, for: &updated) } ) .imagePlaygroundOptions(options) } -
9:39 - Styles
// Styles var options: ImagePlaygroundOptions { var options = ImagePlaygroundOptions() options.sizeSpecification = .closest(to: card.format.size) return options } var body: some View { Button("Create image") { showingPlayground = true } .imagePlaygroundSheet( isPresented: $showingPlayground, concepts: concepts, onCompletion: { url in var updated = card store.saveImage(url, for: &updated) } ) .imagePlaygroundOptions(options) .imagePlaygroundGenerationStyle( pendingStylePreset.defaultStyle, in: pendingStylePreset.allowedStyles ) } -
10:27 - External Provider Style
// External Provider Style var options: ImagePlaygroundOptions { var options = ImagePlaygroundOptions() options.sizeSpecification = .closest(to: card.format.size) return options } var body: some View { Button("Create image") { showingPlayground = true } .imagePlaygroundSheet( isPresented: $showingPlayground, concepts: concepts, onCompletion: { url in var updated = card store.saveImage(url, for: &updated) } ) .imagePlaygroundOptions(options) .imagePlaygroundGenerationStyle( pendingStylePreset.defaultStyle, in: pendingStylePreset.allowedStyles + [.externalProvider] ) } -
11:02 - Generating an expressive icon for the card thumbnail
// Generating an expressive icon for the card thumbnail @State private var showingIconPlayground = false var body: some View { Button("Create icon") { showingIconPlayground = true } Color.clear .imagePlaygroundSheet( isPresented: $showingIconPlayground, concepts: concepts, onCompletion: { _ in } , onAdaptiveImageGlyphCreation: { glyph in var updatedCard = card store.saveIcon(glyph, for: &updatedCard) } ) .imagePlaygroundGenerationStyle(.emoji, in: [.emoji]) } -
12:01 - Disabling personalization when it doesn't fit your context
// Disabling personalization when it doesn't fit your context var options: ImagePlaygroundOptions { var options = ImagePlaygroundOptions() options.sizeSpecification = .closest(to: card.format.size) options.personalization = .disabled return options } -
12:32 - Supports image generation
// Supports image generation @Environment(\.supportsImageGeneration) private var supportsImageGeneration var body: some View { NavigationLink(card.recipient) { if supportsImageGeneration { CardEditorView(card: card) }γelse { CardPickerView(card: card) } } }
-