如何在iPad上创建TIFF

时间:2012-01-03 15:45:14

标签: ios ipad uiimage tiff

我正在尝试从TIFF创建UIImage图片。我查看了Apple的文档,但找不到任何信息。

有人可以帮我解释如何在iPad上创建TIFF图片吗?

4 个答案:

答案 0 :(得分:11)

在我看来,ImageMagick 方式过度杀戮只是为了写tiff。为什么不建立libtiff?它受iOS支持,是大多数软件包用来编写tiff(包括ImageMagick)的东西。

您甚至可以使用上面ImageMagick链接中的libtiff.a文件。只需将lib和tiff标头安装到您的项目中即可。 编辑:

这是一个nice tutorial,告诉您如何在安装libtiff后编写tiff。 tutorial的第二部分向您展示了如何控制压缩。

答案 1 :(得分:7)

我觉得这个答案有点晚了,但是如果有人想知道如何做到这一点,我想你会发现以下内容会有所帮助:

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将保存TIFF文件的NSData编码,然后您可以将其存储到磁盘,上传到服务器,无论...

您可能需要包含MobileCoreServices和ImageIO框架......

答案 2 :(得分:3)

ImageMagick已针对iOS编译,允许处理TIFF图像。说明可在此处找到:

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

还有一个Sample Project说明了如何将此功能集成到您的应用程序中。应该注意的是,包含此库需要几个步骤 - 并且说明包含在上面的链接中。

为IMAGEMAGICK设置项目

首先,在名称中使用 libs 下载最新版本(来自上面的第一个链接)。这包括所需框架的预编译版本。解压缩此文件的内容。接下来,右键单击iOS项目中的 Frameworks ,然后选择添加文件选项。添加扩展名为.a的每个文件。你应该有类似的东西:

Frameworks Group with Needed ImageMagick Frameworks

接下来,您需要添加正确的标题搜索路径。转到项目的“构建设置”并搜索标题搜索路径。选择此选项并添加与包含目录所在位置相对应的新搜索路径(来自下载)。不要仅为调试或发布添加它,而是为所有人添加。你现在应该有这样的东西:

Header Search Paths for ImageMagick

现在,您应该能够包含和使用ImageMagick框架中的代码。

答案 3 :(得分:0)

只需使用以下代码即可获得.tiff image。您必须将ImageIOMobileCoreServices框架添加到项目中。

#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

希望,这就是你要找的东西。 :)