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

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

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

4 ответа

Решение

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

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

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

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

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...

Павел

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

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

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

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

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

Frameworks Group с необходимыми ImageMagick Frameworks

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

Пути поиска заголовка для ImageMagick

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

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

#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);
}

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

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

Другие вопросы по тегам