Генерация изображений
Создавайте один или несколько результатов UIImage по текстовому запросу. Лимиты поставщика и выбор стиля — необязательные возможности, которые не должны блокировать запуск генерации.
Жизненный цикл генерации изображения
Подготовьте запрос, используйте лимиты и стили поставщика при наличии, а иначе примените стандартную конфигурацию задачи.
Предварительные условия
- Инициализируйте
AIBudsAISDK, выберите поставщика и при необходимости завершите его авторизацию. - Убедитесь, что выбранный поставщик реализует
AIGCServiceAPI. - Определите политику приложения для отображения, хранения и передачи созданных изображений.
Реализация с помощью AI
Реализуйте этот сценарий с AI
Используйте официальный навык «Генерация изображений с AIBuds AI» и адаптируйте сценарий к приложению.
Прочитайте и выполните инструкции https://docs-aibuds.github.io/ru/skills/generate-aibuds-ai-images. Используйте этот навык, чтобы реализовать «Генерация изображений с AIBuds AI» в данном iOS-проекте и проверить результат.API Reference
Framework
AIBudsAI.xcframework
Declaration
- Swift
- Objective-C
/// The available styles cached by the selected image-generation provider.
static var aigcStyles: [AIGCStyleModel]? { get }
/// The maximum number of images accepted in one task. A positive value can be
/// used to constrain the requested image count.
static var aigcMaxGenerateCount: Int { get }
/// Fetches styles supported by the selected provider.
public static func fetchAigcStyles(completion: ((_ styles: [AIGCStyleModel]?, _ error: NSError?) -> Void)? = nil)
/// Generates images from a text prompt and configuration.
/// - Parameters:
/// - prompt: The text prompt for image generation.
/// - config: Task configuration. Defaults to `.default`.
/// - onTaskCreated: Called with the provider task identifier.
/// - completion: Returns the task identifier, success flag, generated images,
/// and failure information.
public static func generateAIPhoto(prompt: String,
config: AIGCTaskConfig = .default,
onTaskCreated: ((_ taskId: String) -> Void)? = nil,
completion: ((
_ taskId: String?,
_ success: Bool,
_ images: [UIImage]?,
_ error: NSError?
) -> Void)? = nil)/// Styles cached by the selected image-generation provider.
@property(nonatomic, class, readonly, copy) NSArray<AIBudsAIGCStyleModel *> *_Nullable aigcStyles;
/// Maximum image count accepted by one provider task.
@property(nonatomic, class, readonly) NSInteger aigcMaxGenerateCount;
/// Fetches styles supported by the selected provider.
+ (void)fetchAigcStylesWithCompletion:(void (^ _Nullable)(NSArray<AIBudsAIGCStyleModel *> * _Nullable, NSError * _Nullable))completion;
/// Generates images from a text prompt and configuration.
+ (void)generateAIPhotoWithPrompt:(NSString * _Nonnull)prompt
config:(AIBudsAIGCTaskConfig * _Nonnull)config
taskCreated:(void (^ _Nullable)(NSString * _Nonnull))onTaskCreated
completion:(void (^ _Nullable)(NSString * _Nullable, BOOL, NSArray<UIImage *> * _Nullable, NSError * _Nullable))completion;См. generateAIPhoto, fetchAigcStyles и AIGCTaskConfig.
Конфигурация задачи
| Свойство | Назначение |
|---|---|
style | Код стиля поставщика из AIGCStyleModel.styleCode. Оставьте nil, если стили недоступны или приложение не предлагает их выбор. |
imageCount | Запрашиваемое количество. Используйте стандартное значение 1, если положительный aigcMaxGenerateCount недоступен; иначе не превышайте полученный лимит. |
imageSize | Необязательные положительные ширина и высота; nil использует значение поставщика по умолчанию. |
language | Язык запроса, например en-US; nil использует локализацию приложения, а пустая строка включает автоопределение, если оно поддерживается. |
Примеры использования
Генерация с необязательными возможностями поставщика
Если приложение не предлагает выбор стиля, пропустите fetchAigcStyles и вызовите вспомогательный метод генерации с nil. В примере ниже стили загружаются по возможности, но запрос всё равно отправляется при пустом списке или ошибке загрузки.
- Swift
- Objective-C
let prompt = "A lightweight wearable assistant on a clean studio background"
func generate(styleCode: String?) {
let maximum = AIBudsAISDK.aigcMaxGenerateCount
let config = AIGCTaskConfig()
config.style = styleCode
config.imageCount = maximum > 0 ? min(2, maximum) : 1
config.language = "en-US"
AIBudsAISDK.generateAIPhoto(
prompt: prompt,
config: config,
onTaskCreated: { taskID in
DispatchQueue.main.async { showTask(id: taskID) }
},
completion: { taskID, success, images, error in
DispatchQueue.main.async {
guard success, let images, !images.isEmpty else {
if let error {
show(error)
} else {
print("The provider returned no images")
}
return
}
show(images: images, taskID: taskID)
}
}
)
}
AIBudsAISDK.fetchAigcStyles { styles, error in
// Style discovery is optional. A nil style uses the provider default.
let styleCode = error == nil ? styles?.first?.styleCode : nil
generate(styleCode: styleCode)
}NSString *prompt = @"A lightweight wearable assistant on a clean studio background";
void (^generate)(NSString *_Nullable) = ^(NSString *styleCode) {
NSInteger maximum = AIBudsAISDK.aigcMaxGenerateCount;
AIBudsAIGCTaskConfig *config = [[AIBudsAIGCTaskConfig alloc] init];
config.style = styleCode;
config.imageCount = maximum > 0 ? MIN(2, maximum) : 1;
config.language = @"en-US";
[AIBudsAISDK generateAIPhotoWithPrompt:prompt
config:config
taskCreated:^(NSString *taskID) {
dispatch_async(dispatch_get_main_queue(), ^{
[self showTaskID:taskID];
});
}
completion:^(
NSString *taskID, BOOL success, NSArray<UIImage *> *images, NSError *generationError) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!success || images.count == 0) {
[self showError:generationError];
return;
}
[self showImages:images taskID:taskID];
});
}];
};
[AIBudsAISDK
fetchAigcStylesWithCompletion:^(NSArray<AIBudsAIGCStyleModel *> *styles, NSError *error) {
// Style discovery is optional. A nil style uses the provider default.
NSString *styleCode = error == nil ? styles.firstObject.styleCode : nil;
generate(styleCode);
}];Обработка ошибок
Ошибка загрузки стилей или отсутствие лимита не означает ошибку генерации. Используйте style = nil и imageCount = 1, а окончательный результат определяйте по completion callback генерации.
Примечания
- Коды стилей и положительные максимальные количества — необязательные данные поставщика, которые могут меняться. Не фиксируйте значения из Demo в коде.
- Пустой список стилей допустим. Отправьте запрос с
style = nil, чтобы использовать стиль поставщика по умолчанию. - Callback создания задачи не означает, что изображения уже успешно сгенерированы.
- Публичный API сейчас не предоставляет прогресс или отмену генерации изображений.