[英]Detect whether an UIImage is PNG or JPEG?
目前通過MonoTouch進行iPhone開發的第一步,我正在玩我從照片庫中讀取的UIImage
。
我想要實現的是獲取圖像的原始字節數組( byte[]
)。
我知道MonoTouch中有UIImageJPEGRepresentation
和UIImagePNGRepresentation
包裝器。 我也知道如何使用它們。 我不知道的是:
我該如何決定調用這兩個函數中的哪一個?
即如果原始圖像是JPEG圖像,我不希望將其作為PNG而是作為JPEG,反之亦然。
有沒有辦法做到這一點,或者我錯過了一些觀點?
一旦你有了UIImage
,它就可以使用UIImageJPEGRepresentation
或UIImagePNGRepresentation
生成JPEG或PNG。 原始圖像的格式僅在從其創建UIImage時才重要(決定加載它的CFImage
提供程序)。
如果您的應用或算法對確保將其保存為原始格式很重要,我認為您必須在編寫時保留該信息。 我仔細檢查過,找不到任何宣傳它來自哪種格式的東西。
您是要通過UIImageView
更改圖像還是圖像在您的體驗中保持不變? 如果它沒有改變,你只需要UI來選擇圖像,你可以得到文件字節? 例如,如果您只是選擇顯示圖像然后將它們上傳到服務器或其他東西,那么UIImage
只能用於查看和選擇,如果您的數據結構記住它來自哪個文件,您可以將其取回磁盤和上傳。 如果您在視圖中更改文件,那么您或用戶需要決定圖像的輸出(以及jpeg的質量)。
准備
typedef NS_ENUM(NSInteger, DownloadImageType) {
DownloadImageTypePng,
DownloadImageTypeJpg
};
@property (assign, nonatomic) DownloadImageType imageType;
檢測
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *compareString = [[info objectForKey:UIImagePickerControllerReferenceURL] absoluteString];
NSRange pngRange = [compareString rangeOfString:@"PNG" options:NSBackwardsSearch];
if (pngRange.location != NSNotFound) {
compareString = [compareString substringFromIndex:pngRange.location];
self.imageType = DownloadImageTypePng;
NSLog(@"%@", compareString);
} else {
NSLog(@"Not PNG");
}
NSRange jpgRange = [compareString rangeOfString:@"JPG" options:NSBackwardsSearch];
if (jpgRange.location != NSNotFound) {
compareString = [compareString substringFromIndex:jpgRange.location];
self.imageType = DownloadImageTypeJpg;
NSLog(@"%@", compareString);
} else {
NSLog(@"Not JPG");
}
}
使用
if (self.imageType == DownloadImageTypePng) {
} else if (self.imageType == DownloadImageTypeJpg) {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.