美文网首页
iOS 图片的缩放保真

iOS 图片的缩放保真

作者: 莫太极 | 来源:发表于2017-05-10 17:50 被阅读0次

需求背景

测试找到我说:“你这个图也太丑了,严重影响了整体的协调性,能不能改的小点” 我说:“这简单啊,小case”一分钟后,测试MM又来了:“图片怎么都失真了?” “我看看” 真的失真了,而且很明显的锯齿状...奇了个怪了
我是如是做的

- (UIImage *)imageScaled:(float)sizeScale
{
    CGSize size = CGSizeMake(self.size.width * sizeScale, self.size.height * sizeScale);

    UIGraphicsBeginImageContext(size);

    [self drawInRect:CGRectMake(0, 0, self.size.width * sizeScale, self.size.height * sizeScale)];
    
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return scaledImage;
    
}

想了想,点进UIGraphicsBeginImageContext里看了看

// UIImage context

// The following methods will only return a 8-bit per channel context in the DeviceRGB color space.
// Any new bitmap drawing code is encouraged to use UIGraphicsImageRenderer in leiu of this API.
UIKIT_EXTERN void     UIGraphicsBeginImageContext(CGSize size);
UIKIT_EXTERN void     UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) NS_AVAILABLE_IOS(4_0);
UIKIT_EXTERN UIImage* __nullable UIGraphicsGetImageFromCurrentImageContext(void);
UIKIT_EXTERN void     UIGraphicsEndImageContext(void); 

目光聚焦在了UIKIT_EXTERN void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) NS_AVAILABLE_IOS(4_0); 这个方法上

试了一会,最后成型

#pragma mark - 缩放图片不失真
- (UIImage *)imageScaled:(float)sizeScale
{
    CGSize size = CGSizeMake(self.size.width * sizeScale, self.size.height * sizeScale);
    
    if([[UIScreen mainScreen] scale] == 3.0){
        UIGraphicsBeginImageContextWithOptions(size, NO, 3.0);
    }else  if([[UIScreen mainScreen] scale] == 2.0){
        UIGraphicsBeginImageContextWithOptions(size, NO, 2.0);
    }else{
        UIGraphicsBeginImageContext(size);
    }
    [self drawInRect:CGRectMake(0, 0, self.size.width * sizeScale, self.size.height * sizeScale)];
    
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return scaledImage;
    
}

Prefect 测试mm也很满足(😌)

再回看这个方法 UIKIT_EXTERN void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale) NS_AVAILABLE_IOS(4_0);

  • 第一个参数size 就是你想要的尺寸
  • 第二个参数opaque(直译‘不透明’)如果YES背景是黑的,NO背景是透明的
  • 第三个参数 scale 是屏幕的比例,其实就是2x ,3x屏

最后插句嘴 ,我这个方法是写在分类里的

如果你想直接来,可以这样

- (UIImage *)scaleImage:(UIImage *)orginImage withScale:(float)sizeScale
{
    CGSize size = CGSizeMake(orginImage.size.width * sizeScale, orginImage.size.height * sizeScale);
    
    if([[UIScreen mainScreen] scale] == 3.0){ 
               UIGraphicsBeginImageContextWithOptions(size, NO, 3.0);
    }else if([[UIScreen mainScreen] scale] == 2.0){  
              UIGraphicsBeginImageContextWithOptions(size, NO, 2.0);
    }else{
        UIGraphicsBeginImageContext(size);
    }
    [orginImage drawInRect:CGRectMake(0, 0, orginImage.size.width * sizeScale, orginImage.size.height * sizeScale)];
    
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return scaledImage;
    
}

相关文章

  • iOS 图片的缩放保真

    需求背景 测试找到我说:“你这个图也太丑了,严重影响了整体的协调性,能不能改的小点” 我说:“这简单啊,小case...

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

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

  • iOS 图片缩放

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

  • iOS图片缩放

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

  • iOS图片缩放

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

  • iOS 图片缩放

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

  • ios 图片缩放

  • iOS图片缩放

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

  • flutter开发常见问题

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

  • cocos2d-x 优化

    一,IOS与图片内存在IOS上,图片会被自动缩放到2的N次方大小。比如一张10241025的图片,占用的内存与一张...

网友评论

      本文标题:iOS 图片的缩放保真

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