美文网首页
iOS网络大图片缩放

iOS网络大图片缩放

作者: SmallWhiteMouse | 来源:发表于2018-03-18 00:39 被阅读110次

一、本地大高清图

首先我们是本地的一张大图,而你需要放置图片的位置只有几十个像素。要不选择让美工给你缩放图片,否则就可以直接用附录中代码缩放。

Tip:缩放后的图片缓存起来,因为是本地图片,是你常用到的。

二、网络图片

新浪微博的图片是可以根据图片的大小进行预览区域大小的设置,如果固定区域大小让系统layer给你缩放图片、绘制。其一很耗费cpu,其次也就没那么多用户喜欢上他了。

既然是网络图片,那么就在iOS中需要用到网络请求来请求,那么接下来可能会对你有所启发。

思路:图片就是文件,文件就有文件头,一般的文件头里面都会有文件的一些常规信息,可能也包括图片的大小。

苹果提供的NSURLSessionData* API里边:

//返回header头部的API

//利用对象转换就可以获取到请求头header里边的allHeaderFields 

 //NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;

   // httpResponse.allHeaderFields

- (void)URLSession:(NSURLSession*)session dataTask:(NSURLSessionDataTask*)dataTask

                                 didReceiveResponse:(NSURLResponse*)response

                                  completionHandler:(void(^)(NSURLSessionResponseDispositiondisposition))completionHandler;

//返回具体图片的data数据

- (void)URLSession:(NSURLSession*)session dataTask:(NSURLSessionDataTask*)dataTask

                                     didReceiveData:(NSData*)data;

这样的话我就可以利用header里边的图片大小信息,来预设置图片的size。再来加载图片。

这时候可能你会有点毛了。我要看的是图片缩放不是新浪的需求。- _ ->

淡定些~

在返回具体图片的data数据,我们可以直接调动附录中的代码直接缩放成自己要的比例。

当然啦,也有那种量特别大,你会觉得比较卡顿。在调用缩放直接你开辟个线程,比如这样    [selfperformSelectorInBackground:SELwithObject:@""]。

PS:有大神博客中提到:在下载完成后,最好是用background thread,缩放一次,然后在UIImageView中使用缩放后的图片.但笔主实在现在没有查到background thread代码如何书写。有知道的兄弟姐妹些,希望可以不吝赐教啊。(-_ - )!!渴望脸

最后再提两点:

(1) Cache, Cache, 还是Cache!  缓存你缩放了的缩列图。

 (2) 如果实在还想用 NSURLConnection   其中也有对应的API 

- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response 

- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data 

三、附录:缩放图片代码

/**  *  调整图片尺寸和大小  *

 *  @param sourceImage  原始图片

 *  @param maxImageSize 新图片最大尺寸

 *  @param maxSize      新图片最大存储大小  

 *  @return 新图片imageData  

*/

- (NSData*)reSizeImageData:(UIImage*)sourceImage maxImageSize:(CGFloat)maxImageSize maxSizeWithKB:(CGFloat) maxSize{

    if(maxSize <=0.0) maxSize =1024.0;  

  if(maxImageSize <=0.0) maxImageSize =1024.0;     //先调整分辨率     CGSizenewSize =CGSizeMake(sourceImage.size.width, sourceImage.size.height);     CGFloattempHeight = newSize.height/ maxImageSize;

    CGFloattempWidth = newSize.width/ maxImageSize;    

if(tempWidth >1.0&& tempWidth > tempHeight) {  

      newSize =CGSizeMake(sourceImage.size.width/ tempWidth, sourceImage.size.height/ tempWidth);

    }  elseif(tempHeight >1.0&& tempWidth < tempHeight){  

      newSize =CGSizeMake(sourceImage.size.width/ tempHeight, sourceImage.size.height/ tempHeight);  

  }    

UIGraphicsBeginImageContext(newSize);     [sourceImagedrawInRect:CGRectMake(0,0,newSize.width,newSize.height)];     UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();     UIGraphicsEndImageContext();     //调整大小    

NSData*imageData =UIImageJPEGRepresentation(newImage,1.0);     CGFloatsizeOriginKB = imageData.length/1024.0;    

CGFloatresizeRate =0.9;    

while(sizeOriginKB > maxSize && resizeRate >0.1) {  

      imageData =UIImageJPEGRepresentation(newImage,resizeRate);      

  sizeOriginKB = imageData.length/1024.0;    

    resizeRate -=0.1;    

}  

  returnimageData; }

如有不到之处,希望指正,批评~

相关文章

  • iOS网络大图片缩放

    一、本地大高清图 首先我们是本地的一张大图,而你需要放置图片的位置只有几十个像素。要不选择让美工给你缩放图片,否则...

  • 在 iOS 开发中如何优雅地进行图片缩放?

    在 iOS 开发中如何优雅地进行图片缩放? 在 iOS 开发中如何优雅地进行图片缩放?

  • iOS 图片缩放

    按指定尺寸缩放图片 根据屏幕的宽高等比压缩图片

  • iOS图片缩放

    概述 UIButton里要用到一张图片,但是实际的图片尺寸偏大,因此要根据真机的尺寸更改图片大小 方法 参考 io...

  • iOS图片缩放

    利用UIScrollView实现图片的缩放,适合新手。不多说了,直接上代码。

  • iOS 图片缩放

    需求分析 在App的图片查看中常见有以下功能: 图片随用户手指的点击,会进行相应区域的缩放,虽然这个简单的功能十分...

  • ios 图片缩放

  • iOS图片缩放

    1、直接使用UIKit提供的接口UIGraphicsImageRenderer 2、使用Core Graphics...

  • flutter开发常见问题

    1.android获取图片上的二维码会对图片进行缩放处理,可能导致获取失败。要控制缩放比例 2.iOS14以上,使...

  • iOS scrollView缩放图片

    2019.2.27更新: 简化了代码,逻辑更加清晰 个人认为本文正确,优雅地实现了缩放图片。总体效果: 源码地址:...

网友评论

      本文标题:iOS网络大图片缩放

      本文链接:https://www.haomeiwen.com/subject/rtvsqftx.html