Должен ли я использовать 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 Это то, что вы ищете. Причины:

  1. вы можете получить изображение из памяти устройства и назначить его UIImage

  2. вы можете получить изображение из URL и назначить его Объектами UIImage

  3. вы можете написать UIImage в нужном формате в память устройства

  4. вы можете изменить размер изображения, назначенного UIImage

  5. после того, как вы назначили изображение UIImage, вы можете использовать этот экземпляр в элементах управления напрямую. например, установка фона кнопки, установка в качестве изображения для UIImageView

добавил бы примеры кода, но все это основные вопросы, на которые уже ответили в 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