簡體   English   中英

檢測UIImage是PNG還是JPEG?

[英]Detect whether an UIImage is PNG or JPEG?

目前通過MonoTouch進行iPhone開發的第一步,我正在玩我從照片庫中讀取的UIImage

我想要實現的是獲取圖像的原始字節數組( byte[] )。

我知道MonoTouch中有UIImageJPEGRepresentationUIImagePNGRepresentation包裝器。 我也知道如何使用它們。 我不知道的是:

我該如何決定調用這兩個函數中的哪一個?

即如果原始圖像是JPEG圖像,我不希望將其作為PNG而是作為JPEG,反之亦然。

有沒有辦法做到這一點,或者我錯過了一些觀點?

一旦你有了UIImage ,它就可以使用UIImageJPEGRepresentationUIImagePNGRepresentation生成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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM