Как создать 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. У вас должно быть что-то похожее на это:
Далее вам нужно добавить правильные пути поиска заголовка. Перейдите в настройки сборки для вашего проекта и найдите пути поиска заголовка. Выберите это и добавьте новый путь поиска, который соответствует тому, где находится каталог включения (из загрузки). Не добавляйте это только для отладки или выпуска, но для всех. Теперь у вас должно быть что-то похожее на это:
Теперь вы должны иметь возможность включать и использовать код из среды 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);
}
Для более подробной информации, вы можете скачать этот демонстрационный код.
Надеюсь, это то, что вы ищете.:)