zoukankan      html  css  js  c++  java
  • UIImage 缩放

    两种缩放:

    1.缩放到指定大小,也就是指定的`size`.

    2.等比缩放。

    缩放到指定大小

    -(UIImage*)imageCompressWithSimple:(UIImage*)imagescaledToSize:(CGSize)size

    {

    UIGraphicsBeginImageContext(size);

    [imagedrawInRect:CGRectMake(0,0,size.width,size.height)];

    UIImage*newImage=UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    returnnewImage;

    }

    等比缩放

    通过缩放系数

    -(UIImage*)imageCompressWithSimple:(UIImage*)imagescale:(float)scale

    {

    CGSizesize=image.size;

    CGFloatwidth=size.width;

    CGFloatheight=size.height;

    CGFloatscaledWidth=width*scale;

    CGFloatscaledHeight=height*scale;

    UIGraphicsBeginImageContext(size);//thiswillcrop

    [imagedrawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];

    UIImage*newImage=UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    returnnewImage;

    }

    `scale`是缩放系数。

    通过计算得到缩放系数

    -(UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize

    {

    UIImage*sourceImage=[UIImageimageNamed:@"test.jpg"];

    UIImage*newImage=nil;

    CGSizeimageSize=sourceImage.size;

    CGFloatwidth=imageSize.width;

    CGFloatheight=imageSize.height;

    CGFloattargetWidth=targetSize.width;

    CGFloattargetHeight=targetSize.height;

    CGFloatscaleFactor=0.0;

    CGFloatscaledWidth=targetWidth;

    CGFloatscaledHeight=targetHeight;

    CGPointthumbnailPoint=CGPointMake(0.0,0.0);

    if(CGSizeEqualToSize(imageSize,targetSize)==NO)

    {

    CGFloatwidthFactor=targetWidth/width;

    CGFloatheightFactor=targetHeight/height;

    if(widthFactor>heightFactor)

    scaleFactor=widthFactor;//scaletofitheight

    else

    scaleFactor=heightFactor;//scaletofitwidth

    scaledWidth=width*scaleFactor;

    scaledHeight=height*scaleFactor;

    //centertheimage

    if(widthFactor>heightFactor)

    {

    thumbnailPoint.y=(targetHeight-scaledHeight)*0.5;

    }

    elseif(widthFactor<heightFactor)

    {

    thumbnailPoint.x=(targetWidth-scaledWidth)*0.5;

    }

    }

    UIGraphicsBeginImageContext(targetSize);//thiswillcrop

    CGRectthumbnailRect=CGRectZero;

    thumbnailRect.origin=thumbnailPoint;

    thumbnailRect.size.width=scaledWidth;

    thumbnailRect.size.height=scaledHeight;

    [sourceImagedrawInRect:thumbnailRect];

    newImage=UIGraphicsGetImageFromCurrentImageContext();

    if(newImage==nil)

    NSLog(@"couldnotscaleimage");

    //popthecontexttogetbacktothedefault

    UIGraphicsEndImageContext();

    returnnewImage;

    }

    很久之前写了一篇文章解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题。这个我记得当时从服务器拿到的照片大概有10几M的样子,加载出来会导致内存警告。所以我当时通过修改SDWebImage源码,就是把下载下来的照片进行缩放,内存就降下来了。一般情况下应该不会加载这么大的照片的,用户要是知道,早把你的APP给删掉了。

  • 相关阅读:
    centos7修改网卡名称
    xtrabackup备份恢复过程
    centos 设置删除提示
    cetos6 安装samba共享文件夹
    centos 安装cacti监控
    centos6 搭建hdwiki
    centos6.8安装superctl 后台管理工具
    centos6.5 安装ansible,管理多台服务器
    CreateParams作用及重写
    c# 获取当前应用程序的路径
  • 原文地址:https://www.cnblogs.com/sjcries/p/5349397.html
Copyright © 2011-2022 走看看