zoukankan      html  css  js  c++  java
  • UIImage扩展用代码直接改变图片大小

    以下内容属于转载

    在iOS中,uiimage没有用于修改大小的属性,要在代码中改变uiimage图片的大小,需要扩展UIImage类,如下:

    头文件:

    #import<UIKit/UIKit.h>


    @interface UIImage (UIImageExtras)

    - (UIImage *)imageByScalingToSize:(CGSize)targetSize; 

    @end



    .m文件

    #import"UIImage+UIImageExtras.h"


    @implementation UIImage (UIImageExtras)

    - (UIImage *)imageByScalingToSize:(CGSize)targetSize 

        UIImage *sourceImage = self; 

        UIImage *newImage = nil; 

        CGSize imageSize = sourceImage.size; 

        CGFloat width = imageSize.width; 

        CGFloat height = imageSize.height; 

        CGFloat targetWidth = targetSize.width; 

        CGFloat targetHeight = targetSize.height;  

        CGFloat scaleFactor = 0.0; 

        CGFloat scaledWidth = targetWidth; 

        CGFloat scaledHeight = targetHeight;  

        CGPoint thumbnailPoint = CGPointMake(0.0,0.0); 

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

            CGFloat widthFactor = targetWidth / width;      

            CGFloat heightFactor = targetHeight / height;   

            if (widthFactor < heightFactor)        

                scaleFactor = widthFactor;        

            else               

                scaleFactor = heightFactor;     

            scaledWidth  = width * scaleFactor; 

            scaledHeight = height * scaleFactor;        

           // center the image         

            if (widthFactor < heightFactor) { 

             

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

            } else if (widthFactor > heightFactor) {    

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

            } 

        }  

       // this is actually the interesting part: 

       UIGraphicsBeginImageContext(targetSize);  

        CGRect thumbnailRect = CGRectZero; 

        thumbnailRect.origin = thumbnailPoint;

        thumbnailRect.size.width  = scaledWidth; 

        thumbnailRect.size.height = scaledHeight; 

        [sourceImage drawInRect:thumbnailRect]; 

        newImage =UIGraphicsGetImageFromCurrentImageContext(); 

       UIGraphicsEndImageContext(); 

        if(newImage == nil) 

           NSLog(@"could not scale image");   

        return newImage ; 

    }


    @end




    写好扩展类之后,就在要修改UIImage大小的viewcontroller.h头文件空先导入你的写好的扩展类,我的是#import “UIImage+UIImageExtras.h”

    这样,你就可以调用你对UIImage写的那个扩展方法了。


    我调用的地方

    UIImage *tabbarimage=[UIImageimageNamed:@"xxx.png"];

    CGSize imagesize=CGSizeMake(50.0, 50.0);

    self.tabBarItem.image=[tabbarimageimageByScalingToSize:imagesize];



    下面是网上另外一个扩展UIImage类的版本,头文件我就不发了,直接上.m文件


    @implementationUIImage (Category)
     
    - (UIImage*)transformWidth:(CGFloat)width
                        height:(CGFloat)height {
         
        CGFloat destW = width;
        CGFloat destH = height;
        CGFloat sourceW = width;
        CGFloat sourceH = height;
             
        CGImageRef imageRef = self.CGImage;
        CGContextRef bitmap = CGBitmapContextCreate(NULL,
                                                    destW,
                                                    destH,
                                                    CGImageGetBitsPerComponent(imageRef),
                                                    4*destW,
                                                    CGImageGetColorSpace(imageRef),
                                                    (kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst));
         
        CGContextDrawImage(bitmap, CGRectMake(0, 0, sourceW, sourceH), imageRef);
         
        CGImageRef ref = CGBitmapContextCreateImage(bitmap);
        UIImage *result = [UIImage imageWithCGImage:ref];
        CGContextRelease(bitmap);
        CGImageRelease(ref);
         
        returnresult;
    }
    @end
  • 相关阅读:
    接口自动化1-基础知识
    pytest-fixture之conftest.py
    测试人员一定要懂的ADB操作,赶紧来看一看~
    必看!利用装饰器,帮你自动处理异常并优雅实现重跑case
    最全Airtest接口功能介绍和示例总结,新手同学千万不能错过呀!(二)
    总结一波 Redis 面试题,收藏起来!
    IntelliJ IDEA 2020.2.4款 神级超级牛逼插件推荐
    华为 Java 开发编程军规,谁违反谁走
    CTO:再写if-else,逮着罚款1000!
    VSCode 上竟然也能约会,谈对象了???
  • 原文地址:https://www.cnblogs.com/yfming/p/5634613.html
Copyright © 2011-2022 走看看