Должен ли я использовать 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