gpt4 book ai didi

objective-c - objective-c - 如何在保存时以编程方式设置 JPEG 文件的 UIImage DPI

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:48 26 4
gpt4 key购买 nike

我了解到您可以更改图像的元数据以将 dpi 设置为默认值 72 以外的其他值。我尝试了 this question 中的解决方案。但与该问题的作者有同样的问题。原始图像中的图像元数据属性似乎优先于修改。

我正在使用 ALAssetsLibrary 将图像写入我 iPhone 上的照片库。我需要将 dpi 设置为 500 而不是标准的 72dpi。我知道可以通过直接操作位来更改属性 ( as shown here ),但我希望 iOS 提供更好的解决方案。

预先感谢您的帮助。

最佳答案

这段代码用于处理图像元数据 - 如果存在 - 您可以使用它来更改图像元数据中的任何值。请注意,更改元数据中的 DPI 值实际上并不会处理图像和更改 DPI。

#import <ImageIO/ImageIO.h>


-(NSData *)changeMetaDataInImage
{
NSData *sourceImageData = [[NSData alloc] initWithContentsOfFile:@"~/Desktop/1.jpg"];
if (sourceImageData != nil)
{
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)sourceImageData, NULL);

NSDictionary *metadata = (__bridge_transfer NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);

NSMutableDictionary *tempMetadata = [metadata mutableCopy];
[tempMetadata setObject:[NSNumber numberWithInt:300] forKey:@"DPIHeight"];
[tempMetadata setObject:[NSNumber numberWithInt:300] forKey:@"DPIWidth"];

NSMutableDictionary *EXIFDictionary = [[tempMetadata objectForKey:(NSString *)kCGImagePropertyTIFFDictionary] mutableCopy];
[EXIFDictionary setObject:[NSNumber numberWithInt:300] forKey:(NSString *)kCGImagePropertyTIFFXResolution];
[EXIFDictionary setObject:[NSNumber numberWithInt:300] forKey:(NSString *)kCGImagePropertyTIFFYResolution];

NSMutableDictionary *JFIFDictionary = [[NSMutableDictionary alloc] init];
[JFIFDictionary setObject:[NSNumber numberWithInt:300] forKey:(NSString *)kCGImagePropertyJFIFXDensity];
[JFIFDictionary setObject:[NSNumber numberWithInt:300] forKey:(NSString *)kCGImagePropertyJFIFYDensity];
[JFIFDictionary setObject:@"1" forKey:(NSString *)kCGImagePropertyJFIFVersion];

[tempMetadata setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyTIFFDictionary];
[tempMetadata setObject:JFIFDictionary forKey:(NSString *)kCGImagePropertyJFIFDictionary];

NSMutableData *destinationImageData = [NSMutableData data];

CFStringRef UTI = CGImageSourceGetType(source);

CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)destinationImageData, UTI, 1, NULL);

CGImageDestinationAddImageFromSource(destination, source,0, (__bridge CFDictionaryRef) tempMetadata);

CGImageDestinationFinalize(destination);

return destinationImageData;
}
}

关于objective-c - objective-c - 如何在保存时以编程方式设置 JPEG 文件的 UIImage DPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24785433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com