Как создать TIFF на iPad - PullRequest
       27

Как создать TIFF на iPad

5 голосов
/ 03 января 2012

Я пытаюсь создать TIFF изображение из UIImage.Я просмотрел документы Apple, но не смог найти никакой информации.

Кто-нибудь может мне помочь и объяснить, как создать TIFF изображение на iPad?

Ответы [ 4 ]

11 голосов
/ 24 января 2012

Мне кажется, что ImageMagick способ излишне просто писать tiff.Почему бы не собрать libtiff ?iOS поддерживается с его помощью, и это то, что большинство программных пакетов используют для написания TIFF (включая ImageMagick).

Вы даже можете использовать файл libtiff.a по ссылке ImageMagick выше.Просто установите заголовки lib и tiff в ваш проект.РЕДАКТИРОВАТЬ:

Вот хороший учебник , показывающий, как написать TIFF после установки libtiffВторая часть учебника показывает, как управлять сжатием.

7 голосов
/ 21 сентября 2013

Мне кажется, что этот ответ немного запоздал, но в случае, если кто-то еще хочет знать, как это сделать, я думаю, вы найдете следующее:

NSMutableData *mData = [NSMutableData dataWithCapacity:SOME_BIG_NUMBER];
CGImageDestinationRef myImageDest = CGImageDestinationCreateWithData((__bridge  CFMutableDataRef)(mData), kUTTypeTIFF, 1, NULL);
CGImageDestinationAddImage(myImageDest,image.CGImage, NULL);
CGImageDestinationFinalize(myImageDest);
CFRelease(myImageDest);

Затем в mData будет храниться кодировка NSData файла TIFF, который вы затем сможете сохранить на диске, загрузить на сервер, что угодно ...

Возможно, вам потребуется включить MobileCoreServices и платформы ImageIO ...

Пол

3 голосов
/ 17 января 2012

ImageMagick был скомпилирован для iOS и позволяет обрабатывать изображения TIFF. Инструкции можно найти здесь:

http://www.imagemagick.org/script/binary-releases.php?ImageMagick=34s6srn5bll7310o0qo6db5hb3#iOS

Существует также Пример проекта , который иллюстрирует, как интегрировать эти функции в ваше приложение. Следует отметить, что для включения этой библиотеки необходимо выполнить несколько шагов - и инструкции приведены в ссылке выше.

НАСТРОЙКА ПРОЕКТА ДЛЯ IMAGEMAGICK

Сначала загрузите последнюю версию (по первой ссылке выше) с libs в названии. Это включает в себя предварительно скомпилированные версии необходимых платформ. Распакуйте содержимое этого файла. Затем щелкните правой кнопкой мыши Frameworks в своих проектах iOS и выберите параметр Добавить файлы . Добавьте каждый из файлов с расширением .a. У вас должно быть что-то похожее на это:

Frameworks Group with Needed ImageMagick Frameworks

Далее вам нужно добавить правильные пути поиска заголовка. Перейдите в настройки сборки для вашего проекта и найдите Пути поиска заголовка . Выберите это и добавьте новый путь поиска, соответствующий каталогу включения (из загрузки). Не добавляйте это только для отладки или выпуска, но для всех. Теперь у вас должно быть что-то похожее на это:

Header Search Paths for ImageMagick

Теперь вы сможете включать и использовать код из среды ImageMagick.

0 голосов
/ 28 июня 2016

Просто используйте следующий код, и вы получите .tiff image. Вы должны добавить ImageIO и MobileCoreServices Frameworks в ваш проект.

#import <ImageIO/ImageIO.h>
#import <MobileCoreServices/UTCoreTypes.h>

- (void)viewDidLoad {
    [super viewDidLoad];
    [self convertImageIntoTIFF];
}

-(void)convertImageIntoTIFF{
    UIImage *img = [UIImage imageNamed:@"image.png"];

    float compression = 1.0; // Lossless compression if available.
    int orientation = 1; // Origin is at top, left.
    CFStringRef myKeys[3];
    CFTypeRef   myValues[3];
    CFDictionaryRef myOptions = NULL;
    myKeys[0] = kCGImagePropertyOrientation;
    myValues[0] = CFNumberCreate(NULL, kCFNumberIntType, &orientation);
    myKeys[1] = kCGImagePropertyHasAlpha;
    myValues[1] = kCFBooleanTrue;
    myKeys[2] = kCGImageDestinationLossyCompressionQuality;
    myValues[2] = CFNumberCreate(NULL, kCFNumberFloatType, &compression);
    myOptions = CFDictionaryCreate( NULL, (const void **)myKeys, (const void **)myValues, 3,
                                   &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
    NSLog(@"documentsDirectory %@", documentsDirectory);

    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"image.tiff"];

    [self writeCGImage:img.CGImage toURL:[NSURL fileURLWithPath:filePath] withType:kUTTypeTIFF andOptions:myOptions];
}

- (void) writeCGImage: (CGImageRef) image toURL: (NSURL*) url withType: (CFStringRef) imageType andOptions: (CFDictionaryRef) options
{
    CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL((CFURLRef)url, imageType, 1, nil);
    CGImageDestinationAddImage(myImageDest, image, options);
    CGImageDestinationFinalize(myImageDest);
    CFRelease(myImageDest);
}

Для более подробной информации, вы можете скачать этот DemoCode .

Надеюсь, это то, что вы ищете. :)

...