1. 程式人生 > >IOS -- 獲取本地圖片和網路圖片的大小size

IOS -- 獲取本地圖片和網路圖片的大小size

// 獲取圖片的size
        CGSize size = [UIImage imageNamed:@"regStep2_sex"].size;

 獲取網路圖片的尺寸:

// 根據圖片url獲取圖片尺寸
+(CGSize)getImageSizeWithURL:(id)imageURL
{
    NSURL* URL = nil;
    if([imageURL isKindOfClass:[NSURL class]]){
        URL = imageURL;
    }
    if([imageURL isKindOfClass:[NSString class]]){
        URL = [NSURL URLWithString:imageURL];
    }
    if(URL == nil)
        return CGSizeZero;                  // url不正確返回CGSizeZero
     
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL];
    NSString* pathExtendsion = [URL.pathExtension lowercaseString];
     
    CGSize size = CGSizeZero;
    if([pathExtendsion isEqualToString:@"png"]){
        size =  [self getPNGImageSizeWithRequest:request];
    }
    else if([pathExtendsion isEqual:@"gif"])
    {
        size =  [self getGIFImageSizeWithRequest:request];
    }
    else{
        size = [self getJPGImageSizeWithRequest:request];
    }
    if(CGSizeEqualToSize(CGSizeZero, size))                    // 如果獲取檔案頭資訊失敗,傳送非同步請求請求原圖
    {
        NSData* data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:URL] returningResponse:nil error:nil];
        UIImage* image = [UIImage imageWithData:data];
        if(image)
        {
            size = image.size;
        }
    }
    return size;
}
//  獲取PNG圖片的大小
+(CGSize)getPNGImageSizeWithRequest:(NSMutableURLRequest*)request
{
    [request setValue:@"bytes=16-23" forHTTPHeaderField:@"Range"];
    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    if(data.length == 8)
    {
        int w1 = 0, w2 = 0, w3 = 0, w4 = 0;
        [data getBytes:&w1 range:NSMakeRange(0, 1)];
        [data getBytes:&w2 range:NSMakeRange(1, 1)];
        [data getBytes:&w3 range:NSMakeRange(2, 1)];
        [data getBytes:&w4 range:NSMakeRange(3, 1)];
        int w = (w1 << 24) + (w2 << 16) + (w3 << 8) + w4;
        int h1 = 0, h2 = 0, h3 = 0, h4 = 0;
        [data getBytes:&h1 range:NSMakeRange(4, 1)];
        [data getBytes:&h2 range:NSMakeRange(5, 1)];
        [data getBytes:&h3 range:NSMakeRange(6, 1)];
        [data getBytes:&h4 range:NSMakeRange(7, 1)];
        int h = (h1 << 24) + (h2 << 16) + (h3 << 8) + h4;
        return CGSizeMake(w, h);
    }
    return CGSizeZero;
}
//  獲取gif圖片的大小
+(CGSize)getGIFImageSizeWithRequest:(NSMutableURLRequest*)request
{
    [request setValue:@"bytes=6-9" forHTTPHeaderField:@"Range"];
    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    if(data.length == 4)
    {
        short w1 = 0, w2 = 0;
        [data getBytes:&w1 range:NSMakeRange(0, 1)];
        [data getBytes:&w2 range:NSMakeRange(1, 1)];
        short w = w1 + (w2 << 8);
        short h1 = 0, h2 = 0;
        [data getBytes:&h1 range:NSMakeRange(2, 1)];
        [data getBytes:&h2 range:NSMakeRange(3, 1)];
        short h = h1 + (h2 << 8);
        return CGSizeMake(w, h);
    }
    return CGSizeZero;
}
//  獲取jpg圖片的大小
+(CGSize)getJPGImageSizeWithRequest:(NSMutableURLRequest*)request
{
    [request setValue:@"bytes=0-209" forHTTPHeaderField:@"Range"];
    NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
     
    if ([data length] <= 0x58) {
        return CGSizeZero;
    }
     
    if ([data length] < 210) {// 肯定只有一個DQT欄位
        short w1 = 0, w2 = 0;
        [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];
        [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];
        short w = (w1 << 8) + w2;
        short h1 = 0, h2 = 0;
        [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];
        [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];
        short h = (h1 << 8) + h2;
        return CGSizeMake(w, h);
    } else {
        short word = 0x0;
        [data getBytes:&word range:NSMakeRange(0x15, 0x1)];
        if (word == 0xdb) {
            [data getBytes:&word range:NSMakeRange(0x5a, 0x1)];
            if (word == 0xdb) {// 兩個DQT欄位
                short w1 = 0, w2 = 0;
                [data getBytes:&w1 range:NSMakeRange(0xa5, 0x1)];
                [data getBytes:&w2 range:NSMakeRange(0xa6, 0x1)];
                short w = (w1 << 8) + w2;
                short h1 = 0, h2 = 0;
                [data getBytes:&h1 range:NSMakeRange(0xa3, 0x1)];
                [data getBytes:&h2 range:NSMakeRange(0xa4, 0x1)];
                short h = (h1 << 8) + h2;
                return CGSizeMake(w, h);
            } else {// 一個DQT欄位
                short w1 = 0, w2 = 0;
                [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)];
                [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)];
                short w = (w1 << 8) + w2;
                short h1 = 0, h2 = 0;
                [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)];
                [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)];
                short h = (h1 << 8) + h2;
                return CGSizeMake(w, h);
            }
        } else {
            return CGSizeZero;
        }
    }
}

相關推薦

IOS -- 獲取本地圖片網路圖片大小size

// 獲取圖片的size CGSize size = [UIImage imageNamed:@"regStep2_sex"].size;  獲取網路圖片的尺寸: // 根據圖片url獲取圖片尺寸 +(CGSize)getImageSizeWithURL:

iOS開發(OC)——圖片瀏覽器(本地圖片網路圖片都可以用)

PictureSacnViewController *picVC=[PictureSacnViewController new]; NSMutableArray *array=[NSMuta

opencv3.3.0載入本地圖片網路圖片新解

讀入本地圖片 imread的用法如下: 第一個引數是含路徑的檔名,第二個引數是讀入檔案的格式,規定為: 第二個引數可以預設,也可以輸入0和1,0將轉變為灰度圖,1保持原樣。 如下所示

android的輪播圖Banner之本地載入網路載入圖片

前言 關於輪播圖 我個人是比較喜歡 閒來無事的時候 可以整理自己的照片 做一個demo 看看動態的效果 挺不錯的! 每個App也基本都有一些廣告位置 只要開啟這個頁面就會無限輪播廣告圖片 看多了我們也會記得這個效果 那麼他是怎麼實現的呢?今天我就學習了

微信小程式 本地資源圖片無法通過 WXSS 獲取,可以使用網路圖片,或者 base64,或者使用image標籤。

url('data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QMvaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3p

IOS開發之非同步載入網路圖片並快取本地實現瀑布流(一)

</pre><pre name="code" class="objc"></pre><pre name="code" class="objc">在前面的一篇部落格中,我寫了一個瀑布流照片牆的程式,由於之前的程式載入的圖片是本

Flutter -------- 載入本地圖片資源網路圖片

在Flutter載入本地圖片資源 在Flutter專案目錄下建立資料夾 images ,在資料夾中新增幾張圖片 指定資源 p

使用HttpClient傳送HttpPost請求包含上傳本地圖片遠端圖片的傳輸實現

在實際專案中需要在當前系統中模擬瀏覽器傳送一個post請求,正常情況下傳文字沒多大問題,但是如果帶上傳檔案功能的話, 網上的資料不太好找,好在經過我多方尋找,加上自由發揮,真讓我搞出來了。 下面程式碼為核心程式碼, 可以上傳  File物件, 轉換成byte

iOS獲取網頁上資料(圖片、文字、視訊)

獲取網頁上所有圖片、獲取所有html、獲取網頁title、獲取網頁內容文字。。。 .h 檔案 程式碼: //網頁 //NSString *strPath = [NSString stringWithFormat:@"http://www.bai

iOS獲取檔案長度檔案大小

#pragma 獲取檔案大小 - (CGFloat) getFileSize:(NSString *)path { NSFileManager *fileManager = [[NSFileM

React 中引入本地圖片背景圖片的方法

1、在webpack.config中找到相應的圖片路徑的縮寫配置(不是所有的專案都有縮寫配置的,在大型專案中為了書寫方便進行縮寫配置) 所以我的圖片都在縮寫路徑 Image

Android本地圖片或者網路圖片高斯模糊效果(毛玻璃效果)圖片模糊效果一行程式碼搞定

一,實現本地圖片或者網路圖片的毛玻璃效果特別方便,只需要把下面的FastBlurUtil類複製到你的專案中就行 package com.testdemo.blur_image_lib10;   import android.graphics.Bitmap;   import andr

ios 載入本地HTML檔案,圖片不顯示的問題

第一種方式匯入HTML檔案的時候,要用這種方法:   NSString *path = [[NSBundle mainBundle] pathForResource:@"檔名" ofType:@"html"];     NSString *html = [NSStrin

簡單!!!!kindeditor隱藏上傳圖片網路圖片本地上傳的功能

轉載:http://www.lingchenliang.com/category-2.html kindeditor富文字編輯器點選上傳圖片按鈕,在彈出的視窗中去掉上傳網路圖片的功能,只留下本地上傳,如圖: 以及關閉本地上傳檔案功能,只開啟網路圖片功能,如圖: 4.1

iOS 開發中如何顯示網路圖片

              by Fanxiushu  2015-07-10 轉載或引用請註明原作者  iOS開發中,使用UIImageView控制元件來顯示圖片,非常簡單幾句話就能顯示一個完整的圖片:UIImageView* img =[[UIImageView allo

iOS 獲取導航欄狀態欄的高度

bsp statusbar pan frame bar gin cgrect tom uia CGRect rect = [[UIApplication sharedApplication] statusBarFrame]; 狀態欄的高度: float status

簡單的PHP上傳圖片刪除圖片示例程式碼

分享一例簡單的PHP上傳圖片和刪除圖片示例程式碼,很簡單,適合初學的朋友參考,用來研究php上傳圖片還是不錯的。 <?phpif (!empty($_FILES["img"]["name"])) { //提取檔案域內容名稱,並判斷$path=”uppic/”; //上傳路徑if(!file_exist

Glide 圓形圖片圓角圖片的實現

一、背景前言 在Android APP的設計中圓角和圓形圖片的設計是必須的,網上關於圓形和圓角圖片的實現方案也已經有很多,但是那都是人家的,因此在此總結一下,方便後續設計中的查閱,希望對需要幫助的你也有用。 二、方案的實現 2.1 方案一 使用RoundedBitmapDraw

Android 利用傳送Intent播放本地視訊網路視訊 (轉載)

http://blog.sina.com.cn/s/blog_a000da9d01011y85.html Android中除了利用VideoView、Mediaplayer播放視訊檔案外,還可以用傳送Intent來呼叫視訊播放模組。   方法如下: &nb

在Java應用程式中將PDF轉換為圖片圖片轉換為PDF

這篇文章將介紹如何在Java應用程式中將PDF檔案轉換為圖片以及將圖片轉換為PDF檔案。 使用元件: Free Spire.PDF for JAVA Free Spire.PDF for JAVA是一款完全免費的PDF Java元件,開發人員可以使用它在Java應用程式中進行建立PD