• 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给删掉了。

  • 相关阅读:
    php源码学习——开篇
    springMvc入门一
    spring 整合 servlet
    java jar包下载地址
    java spring学习
    Servlet 学习
    JRE_HOME environment variable is not defined correctly This environment variableis needed to run this program
    java JBDC操作
    Java 自定义异常
    JAVA的日期类DATE
  • 原文地址:https://www.cnblogs.com/sjcries/p/5349397.html
Copyright © 2020-2023  润新知