TIFF iOS
标记图像文件格式库
《GeoPackage Libraries》是由国家地理空间情报局 (NGA) 与 BIT Systems 合作开发的。政府拥有“无限权”并且通过向开发者提供新的方向的机会来增加政府投资的效应,发布此软件。该软件的使用、修改和分发权在MIT 许可证中规定。
拉取请求
如果您想为此项目贡献力量,请发起一个拉取请求。我们将评审拉取请求并讨论变更。此项目中的所有拉取请求贡献都将根据 MIT 许可证发布。
曾以开源许可证发布的软件源代码而后由 NGA 员工修改的被认为是“联合作品”(参见 17 USC § 101);它是部分版权作品,部分公有领域,作为一个整体由非政府作者的版权保护,并必须按原始开源许可证的条款发布。
关于
TIFF是一个iOS Objective-C库,用于读取和写入标记图像文件格式(TIFF)文件。它主要为了提供给iOS应用程序友好的TIFF功能。实施基于TIFF规范和此JavaScript实现:https://github.com/constantinius/geotiff.js
使用说明
查看最新的Appledoc
读取
// NSData *data = ...;
// NSString *file = ...;
// NSInputStream *stream = ...;
// TIFFByteReader *reader = ...;
TIFFImage *tiffImage = [TIFFReader readTiffFromData:data];
// TIFFImage *tiffImage = [TIFFReader readTiffFromFile:file];
// TIFFImage *tiffImage = [TIFFReader readTiffFromStream:stream];
// TIFFImage *tiffImage = [TIFFReader readTiffFromReader:reader];
NSArray<TIFFFileDirectory *> *directories = [tiffImage fileDirectories];
TIFFFileDirectory *directory = [directories objectAtIndex:0];
TIFFRasters *rasters = [directory readRasters];
写入
int width = 256;
int height = 256;
int samplesPerPixel = 1;
int bitsPerSample = 32;
TIFFRasters *rasters = [[TIFFRasters alloc] initWithWidth:width andHeight:height andSamplesPerPixel:samplesPerPixel andSingleBitsPerSample:bitsPerSample];
int rowsPerStrip = [rasters calculateRowsPerStripWithPlanarConfiguration:(int)TIFF_PLANAR_CONFIGURATION_CHUNKY];
TIFFFileDirectory *directory = [[TIFFFileDirectory alloc] init];
[directory setImageWidth: width];
[directory setImageHeight: height];
[directory setBitsPerSampleAsSingleValue: bitsPerSample];
[directory setCompression: TIFF_COMPRESSION_NO];
[directory setPhotometricInterpretation: TIFF_PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO];
[directory setSamplesPerPixel: samplesPerPixel];
[directory setRowsPerStrip: rowsPerStrip];
[directory setPlanarConfiguration: TIFF_PLANAR_CONFIGURATION_CHUNKY];
[directory setSampleFormatAsSingleValue: TIFF_SAMPLE_FORMAT_FLOAT];
[directory setWriteRasters: rasters];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
float pixelValue = 1.0; // any pixel value
[rasters setFirstPixelSampleAtX:x andY:y withValue:[[NSDecimalNumber alloc] initWithFloat:pixelValue]];
}
}
TIFFImage *tiffImage = [[TIFFImage alloc] init];
[tiffImage addFileDirectory:directory];
NSData *data = [TIFFWriter writeTiffToDataWithImage:tiffImage];
// or
// NSString *file = ...;
// [TIFFWriter writeTiffWithFile:file andImage:tiffImage];
构建
使用Xcode和/或CocoaPods构建此存储库
pod install
在Xcode中打开tiff-ios.xcworkspace或从命令行构建
xcodebuild -workspace 'tiff-ios.xcworkspace' -scheme tiff-ios build
在Xcode或命令行中运行测试
xcodebuild test -workspace 'tiff-ios.xcworkspace' -scheme tiff-ios -destination 'platform=iOS Simulator,name=iPhone 14'
包含库
通过在Podfile中指定受支持的选项来包含此存储库。
从CocoaPods获取
pod 'tiff-ios', '~> 4.0.1'
从GitHub获取
pod 'tiff-ios', :git => 'https://github.com/ngageoint/tiff-ios.git', :branch => 'master'
pod 'tiff-ios', :git => 'https://github.com/ngageoint/tiff-ios.git', :tag => '4.0.1'
作为本地项目包含
pod 'tiff-ios', :path => '../tiff-ios'
Swift
从Swift使用,请从Swift项目的桥接头中导入tiff-ios桥接头
#import "tiff-ios-Bridging-Header.h"
读取
// let data: Data = ...
// let file: String = ...
// let stream: NSInputStream = ...
// let reader: TIFFByteReader = ...
let tiffImage: TIFFImage = TIFFReader.readTiff(from: data)
// let tiffImage: TIFFImage = TIFFReader.readTiff(fromFile: file)
// let tiffImage: TIFFImage = TIFFReader.readTiff(from: stream)
// let tiffImage: TIFFImage = TIFFReader.readTiff(from: reader)
let directories: [TIFFFileDirectory] = tiffImage.fileDirectories()
let directory: TIFFFileDirectory = directories[0]
let rasters: TIFFRasters = directory.readRasters()
写入
let width: UInt16 = 256
let height: UInt16 = 256
let samplesPerPixel: UInt16 = 1
let bitsPerSample: UInt16 = 32
let rasters: TIFFRasters = TIFFRasters(width: Int32(width), andHeight: Int32(height), andSamplesPerPixel: Int32(samplesPerPixel), andSingleBitsPerSample: Int32(bitsPerSample))
let rowsPerStrip: UInt16 = UInt16(rasters.calculateRowsPerStrip(withPlanarConfiguration: Int32(TIFF_PLANAR_CONFIGURATION_CHUNKY)))
let directory: TIFFFileDirectory = TIFFFileDirectory()
directory.setImageWidth(width)
directory.setImageHeight(height)
directory.setBitsPerSampleAsSingleValue(bitsPerSample)
directory.setCompression(UInt16(TIFF_COMPRESSION_NO))
directory.setPhotometricInterpretation(UInt16(TIFF_PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO))
directory.setSamplesPerPixel(samplesPerPixel)
directory.setRowsPerStrip(rowsPerStrip)
directory.setPlanarConfiguration(UInt16(TIFF_PLANAR_CONFIGURATION_CHUNKY))
directory.setSampleFormatAsSingleValue(UInt16(TIFF_SAMPLE_FORMAT_FLOAT))
directory.writeRasters = rasters
for y in 0..<height {
for x in 0..<width {
let pixelValue: Float = 1.0 // any pixel value
rasters.setFirstPixelSampleAtX(Int32(x), andY: Int32(y), withValue: NSDecimalNumber(value: pixelValue))
}
}
let tiffImage: TIFFImage = TIFFImage()
tiffImage.addFileDirectory(directory)
let data: Data = TIFFWriter.writeTiffToData(with: tiffImage)
// or
// let file: String = ...
// TIFFWriter.writeTiff(withFile: file, andImage: tiffImage)