Должен ли я использовать UIImage или CGImage в приложении Swift iOS?
весь код, который я могу найти, вращается вокруг загрузки изображений непосредственно в визуальные элементы управления.
однако у меня есть собственная система кэша (преобразование проекта с другого языка), и поэтому я как можно эффективнее хочу следующее:
- загрузить изображения jpg / png - возможно, в растровое изображение / cgimage. (его можно либо из файловой системы, либо из изображений, загруженных онлайн)
- возможно сохранить изображение в сжатом / измененном формате png / jpg файл
- поставить ссылку на изображение для визуального контроля
Я новичок в swift и iOS-платформе, но, насколько я могу судить, cgimage настолько близок, насколько это возможно? Однако при использовании cgimage не представляется возможным загрузить изображение из файловой системы... Но я нашел людей, обсуждающих способы, например, UIImage, поэтому теперь я сомневаюсь, что мое первоначальное впечатление ha cgimage было лучшим соответствием моим потребностям.
3 ответов
легко запутаться между UIImage, CGImage и CIImage. Разница заключается в следующем:
объектами UIImage: UIImage object-это высокоуровневый способ отображения данных изображения. Вы можете создавать изображения из файлов, из Quartz объекты изображения или из необработанных данных изображения, которые вы получаете. Они неизменяемы и должны указывать свойства изображения во время инициализации. Это также означает, что эти объекты изображения безопасны для использования с любого нитка.
Как правило, вы можете взять NSData объект, содержащий PNG или JPEG представление изображения и преобразовать его в UIImage.
CGImage: A CGImage может представлять только растровые изображения. Операции в CoreGraphics, такие как режимы наложения и маскирования требует CGImageRefs. Если вам нужно получить доступ и изменить данные растрового изображения, вы можете использовать CGImage. Он также может быть преобразован в NSBitmapImageReps.
CIImage: A CIImage - неизменяемый объект, представляющий изображение. Это не образ. С ним связаны только данные изображения. Он обладает всей информацией, необходимой для создания образа.
Вы обычно используете CIImage объекты в сочетании с другими основными классами изображений, такими как CIFilter, CIContext, CIColor и CIVector. Можно создавать объекты CIImage с данными, поступающими из различных источников, таких как Quartz 2D изображения, изображение сердечника видео, etc.
Требуется использовать различные GPU оптимизированные фильтры изображения ядра. Они также могут быть преобразованы в NSBitmapImageReps. Он может быть основан на CPU или GPU.
в заключение UIImage Это то, что вы ищете. Причины:
вы можете получить изображение из памяти устройства и назначить его UIImage
вы можете получить изображение из URL и назначить его Объектами UIImage
вы можете написать UIImage в нужном формате в память устройства
добавил бы примеры кода, но все это основные вопросы, на которые уже ответили в Stackoverflow, поэтому нет смысла. Не говоря уже о том, что добавление кода сделает это излишне большим.
кредит для суммирования различий:Рэндалл Люн
вы можете легко загрузить изображение в объект UIImage...
NSData *data = [NSData dataWith...];
UIImage *image = [UIImage imageWithData:data];
Если вы хотите показать его в представлении, вы можете использовать UIImageView:
UIImageView *imageView = [[UIImageView alloc] init]; // or whatever
...
imageView.image = image;
более подробно см. документация UIImage.
в документации по адресу:https://developer.apple.com/documentation/uikit/uiimage
let uiImage = uiImageView.image
let cgImage = uiImage.cgImage