如何在 iPad 上创建 TIFF

Posted

技术标签:

【中文标题】如何在 iPad 上创建 TIFF【英文标题】:How to create a TIFF on the iPad 【发布时间】:2012-01-03 15:45:13 【问题描述】:

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

谁能帮我解释一下如何在 iPad 上创建TIFF 图像?

【问题讨论】:

据我所知,ios 没有 TIFF 图像库。您可能需要将图像上传到服务器,然后让服务器将其转换为 TIFF。 遗憾的是,iOS 中没有 -[NSImage TIFFRepresentation]... 这些错误意味着您必须将 libz 库添加到“构建阶段”中。点击你的项目(XCode的右上角),点击你的目标,点击“Build Phases”,点击“Link Binary with Libraries”,点击+,然后选择libz.dylib。 谢谢这工作。我在转换数据类型方面需要一些帮助,请您查看修改后的问题。 【参考方案1】:

在我看来,ImageMagick 方式只是为了写 tiffs。为什么不构建libtiff?它支持 iOS,并且是大多数软件包用来编写 tiff(包括 ImageMagick)的工具。

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

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

【讨论】:

我试了几次。这是一个 c 库,当我将它包含到我的 ios 项目中时它不起作用。我尝试了几种方法,但都不起作用。 没有理由不能在 iOS 应用程序中使用 C/C++ 库。我一直在使用它们。您到底尝试了什么,为什么它不起作用?请在上面修改您的问题。 需要安装静态库和头文件。您可以从下面发布的 image magick 二进制文件下载 libtiff 静态库。 我试过了。我从 imagemagick 添加了 libtiff.a lib 文件,并添加了包含 4 个头文件的 tiff 文件夹。我还应该指定标题搜索路径吗? 我添加了它的工作路径。我不知道如何在项目中使用 write.c 和 read.c。我从 write.c 复制了代码,并将其放入了一个不起作用的函数。你能帮忙吗?【参考方案2】:

我觉得这个答案有点晚了,但如果其他人想知道如何做到这一点,我想你会发现以下方法可以解决问题:

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

保罗

【讨论】:

您还可以通过传递字典而不是 NULL 来指定书写选项(压缩、方向等)。更多详情可以查看github.com/alexbutenko/TIFFWriter 对于那些想要避免在他们的项目中添加另一个库的人来说,这是迄今为止最好的答案。【参考方案3】:

ImageMagick 已为 iOS 编译并允许处理 TIFF 图像。可以在此处找到说明:

Link

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

为 IMAGEMAGICK 设置项目

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

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

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

【讨论】:

我查看了 ImageMagic。你能告诉我运行脚本吗?我听不懂。 我已经更新了我的答案,其中包含有关如何使用该框架的说明。 你能在你的项目中使用它吗?只是好奇。 是的。我能够将其添加到我的项目中,但我可以转换为 tiff 图像。你能告诉我这件事吗?我的意思是像苹果图书馆。【参考方案4】:

只需使用以下代码即可获得.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。

希望,这就是您要找的。 :)

【讨论】:

以上是关于如何在 iPad 上创建 TIFF的主要内容,如果未能解决你的问题,请参考以下文章

ipad如何在一个视图上以编程方式创建多个表

如何在 iPad PhoneGap 应用程序上编辑现有 PDF(使用 Acrobat pro 创建)

如何在Bokeh中显示TIFF图像?

如何检测文件是 PDF 还是 TIFF?

tiff格式如何转换成jpg格式

如何编写 5+ 通道 TIFF?