iOS gets picture size based on URL
Last Update:2016-08-10
Source: Internet
Author: User
<span id="Label3"></p><p><p>iOS gets picture size based on URL</p></p><pre><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get picture size based on image URL</span></span>+ (cgsize) Getimagesizewithurl: (<span style="color: #0000ff;"><span style="color: #0000ff;">ID</span></span><span style="color: #000000;"><span style="color: #000000;">) Imageurl{nsurl</span></span>* URL =<span style="color: #000000;"><span style="color: #000000;">nil; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>([imageURL Iskindofclass:[nsurl<span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span><span style="color: #000000;"><span style="color: #000000;">]]) {URL</span></span>=<span style="color: #000000;"><span style="color: #000000;">imageURL; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>([imageURL iskindofclass:[nsstring<span style="color: #0000ff;"><span style="color: #0000ff;">class</span></span><span style="color: #000000;"><span style="color: #000000;">]]) {URL</span></span>=<span style="color: #000000;"><span style="color: #000000;">[nsurl urlwithstring:imageurl]; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(URL = =<span style="color: #000000;"><span style="color: #000000;">Nil)</span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span>cgsizezero;<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">URL returned incorrectly Cgsizezero</span></span><span style="color: #000000;"><span style="color: #000000;">nsmutableurlrequest</span></span>*request =<span style="color: #000000;"><span style="color: #000000;">[[nsmutableurlrequest alloc] initwithurl:url]; NSString</span></span>* Pathextendsion =<span style="color: #000000;"><span style="color: #000000;">[url.pathextension lowercasestring]; Cgsize size</span></span>=<span style="color: #000000;"><span style="color: #000000;">cgsizezero; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>([pathextendsion isequaltostring:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">PNG</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]) {size</span></span>=<span style="color: #000000;"><span style="color: #000000;">[self getpngimagesizewithrequest:request]; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>([pathextendsion Isequal:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">gif</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]) {size</span></span>=<span style="color: #000000;"><span style="color: #000000;">[self getgifimagesizewithrequest:request]; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;">{size</span></span>=<span style="color: #000000;"><span style="color: #000000;">[self getjpgimagesizewithrequest:request]; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(cgsizeequaltosize (cgsizezero, Size))<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">sending an asynchronous request to request the original image if the file header information fails to get</span></span><span style="color: #000000;"><span style="color: #000000;">{nsdata</span></span>* data =<span style="color: #000000;"><span style="color: #000000;">[nsurlconnection sendsynchronousrequest:[nsurlrequest requestwithurl:url] returningresponse:nil error:nil]; UIImage</span></span>* Image =<span style="color: #000000;"><span style="color: #000000;">[UIImage imagewithdata:data]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span><span style="color: #000000;"><span style="color: #000000;">(image) {size</span></span>=<span style="color: #000000;"><span style="color: #000000;">image.size; } } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">size;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get the size of a PNG picture</span></span>+ (cgsize) Getpngimagesizewithrequest: (nsmutableurlrequest*<span style="color: #000000;"><span style="color: #000000;">) request{[request setValue:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">bytes=16-23</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>Forhttpheaderfield:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Range</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>* data =<span style="color: #000000;"><span style="color: #000000;">[nsurlconnection sendsynchronousrequest:request Returningresponse:nil error:nil]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(data.length = =<span style="color: #800080;"><span style="color: #800080;">8</span></span><span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>W1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, W2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, W3 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, W4 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&W1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&W2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">1</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&W3 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">2</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&w4 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">3</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>W = (w1 <<<span style="color: #800080;"><span style="color: #800080;"></span> -</span>) + (w2 <<<span style="color: #800080;"><span style="color: #800080;"></span> -</span>) + (W3 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span>) +<span style="color: #000000;"><span style="color: #000000;">w4; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>H1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, H2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, h3 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, H4 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&h1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">4</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&h2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">5</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&h3 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">6</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&h4 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">7</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">int</span></span>H = (h1 <<<span style="color: #800080;"><span style="color: #800080;"></span> -</span>) + (H2 <<<span style="color: #800080;"><span style="color: #800080;"></span> -</span>) + (h3 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span>) +<span style="color: #000000;"><span style="color: #000000;">h4; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">Cgsizemake (w, h); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">cgsizezero;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get the size of a GIF picture</span></span>+ (cgsize) Getgifimagesizewithrequest: (nsmutableurlrequest*<span style="color: #000000;"><span style="color: #000000;">) request{[request setValue:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">bytes=6-9</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>Forhttpheaderfield:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Range</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>* data =<span style="color: #000000;"><span style="color: #000000;">[nsurlconnection sendsynchronousrequest:request Returningresponse:nil error:nil]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(data.length = =<span style="color: #800080;"><span style="color: #800080;">4</span></span><span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>W1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, W2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&W1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&W2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">1</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>w = W1 + (w2 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>H1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, H2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&h1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">2</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&h2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">3</span></span>,<span style="color: #800080;"><span style="color: #800080;">1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>H = h1 + (h2 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span><span style="color: #000000;"><span style="color: #000000;">); </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">Cgsizemake (w, h); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">cgsizezero;}</span></span><span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">get the size of a JPG picture</span></span>+ (cgsize) Getjpgimagesizewithrequest: (nsmutableurlrequest*<span style="color: #000000;"><span style="color: #000000;">) request{[request setValue:</span></span><span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">bytes=0-209</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span>Forhttpheaderfield:<span style="color: #800000;"><span style="color: #800000;">@"</span></span><span style="color: #800000;"><span style="color: #800000;">Range</span></span><span style="color: #800000;"><span style="color: #800000;">"</span></span><span style="color: #000000;"><span style="color: #000000;">]; NSData</span></span>* data =<span style="color: #000000;"><span style="color: #000000;">[nsurlconnection sendsynchronousrequest:request Returningresponse:nil error:nil]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>([data length] <=<span style="color: #800080;"><span style="color: #800080;">0x58</span></span><span style="color: #000000;"><span style="color: #000000;">) { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">cgsizezero; } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>([data length] <<span style="color: #800080;"><span style="color: #800080;"></span> about</span>) {<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">there must be only one DQT field</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>W1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, W2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&W1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x60</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&W2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x61</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>W = (w1 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span>) +<span style="color: #000000;"><span style="color: #000000;">w2; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>H1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, H2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&h1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x5e</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&h2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x5f</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>H = (h1 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span>) +<span style="color: #000000;"><span style="color: #000000;">h2; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">Cgsizemake (w, h); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;"> { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>Word =<span style="color: #800080;"><span style="color: #800080;">0x0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&word Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x15</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(word = =<span style="color: #800080;"><span style="color: #800080;">0xdb</span></span><span style="color: #000000;"><span style="color: #000000;">) {[data getBytes:</span></span>&word Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x5a</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">if</span></span>(word = =<span style="color: #800080;"><span style="color: #800080;">0xdb</span></span>) {<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">two x DQT fields</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>W1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, W2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&W1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0xa5</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&W2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0xa6</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>W = (w1 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span>) +<span style="color: #000000;"><span style="color: #000000;">w2; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>H1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, H2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&h1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0xa3</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&h2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0xa4</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>H = (h1 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span>) +<span style="color: #000000;"><span style="color: #000000;">h2; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">Cgsizemake (w, h); } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span>{<span style="color: #008000;"><span style="color: #008000;">//</span></span><span style="color: #008000;"><span style="color: #008000;">a DQT field</span></span> <span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>W1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, W2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&W1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x60</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&W2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x61</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>W = (w1 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span>) +<span style="color: #000000;"><span style="color: #000000;">w2; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>H1 =<span style="color: #800080;"><span style="color: #800080;">0</span></span>, H2 =<span style="color: #800080;"><span style="color: #800080;">0</span></span><span style="color: #000000;"><span style="color: #000000;">; [data getBytes:</span></span>&h1 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x5e</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; [data getBytes:</span></span>&h2 Range:nsmakerange (<span style="color: #800080;"><span style="color: #800080;">0x5f</span></span>,<span style="color: #800080;"><span style="color: #800080;">0x1</span></span><span style="color: #000000;"><span style="color: #000000;">)]; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;"></span> short</span>H = (h1 <<<span style="color: #800080;"><span style="color: #800080;">8</span></span>) +<span style="color: #000000;"><span style="color: #000000;">h2; </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">Cgsizemake (w, h); } } </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">Else</span></span><span style="color: #000000;"><span style="color: #000000;"> { </span></span><span style="color: #0000ff;"><span style="color: #0000ff;">return</span></span><span style="color: #000000;"><span style="color: #000000;">cgsizezero; } }}</span></span></pre><p><p>Link:</p></p><p><p>Get picture size by URL IOS</p></p><p><p>iOS gets picture size based on URL</p></p></span>