zoukankan      html  css  js  c++  java
  • iOS 图片裁剪与修改

    最近做的项目中需要上传头像,发表内容的时候也要涉及到图片上传,我直接用的原图上传,但是由于公司网络差,原图太大,老是加载好久好久,所以需要把原图裁剪或者修改分辨率之后再上传,找了好久,做了很多尝试才解决问题,下面记录一下,以便帮助自己查找,也希望能帮助其他人。

    我们一般图片上传最好使用UIImageJPEGRepresentation(image, 0.1)这个方法先把图片处理一下,其实这个方法把图片压缩之后,图片大小会小很多(小多少待会再讲),但是在app上人眼的感觉差不多,我对图片的处理如下:

    从相册拿到图片后,先经过方法修改图片的大小,也就是分辨率,方法如下:

    - (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)size
    {
        UIGraphicsBeginImageContextWithOptions(size,NO,0.0);
        [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
        UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return scaledImage;
    }

    因为我是要上传头像,所以我把图片的size设置为(128,128),这里我在模拟器中截取到了一个320*320的图片,然后经过这个方法压缩后得到的图片是20.3KB,然后我在上传之前又用UIImageJPEGRepresentation(image, 0.05)把图片品质压缩了一下,图片的大小变成了1.5KB左右,这样的小图,在app上加载起来快急了,之前那个七八十KB的图片经常都加载不出来呢,现在OK了~。

    总结:1、用 - (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)size 修改图片的分辨率;

      2、用 UIImageJPEGRepresentation(image,0.1)这个方法来压缩图片品质。

    其他补充,另一个方法UIImagePNGRepresentation(image),这个方法拿到的图片会比UIImageJPEGRepresentation(image,1.0)拿到的图片大一点,不知道为什么,欢迎其他人来补充。

    另一个裁剪图片的某部分区域的方法:

    - (UIImage *)croppedImage:(UIImage *)image
    
    {
        if (image)
        {
            CGRect rectMAX = CGRectMake(0, 0, 128, 128);
            
            CGImageRef subImageRef = CGImageCreateWithImageInRect(image.CGImage, rectMAX);
            
            UIGraphicsBeginImageContext(rectMAX.size);
            CGContextRef context = UIGraphicsGetCurrentContext();
            CGContextDrawImage(context, rectMAX, subImageRef);
            UIImage *viewImage = [UIImage imageWithCGImage:subImageRef];
            UIGraphicsEndImageContext();
            CGImageRelease(subImageRef);
            return viewImage;
        }
        
        return nil;
    
    }

    这个方法可以获取裁剪后的图片,举个例子,一个256*256的图片,用这个方法之后,就可以获取到左上角一个128*128区域的图片,具体裁剪哪里,可以修改上面rectMax的坐标和大小。

  • 相关阅读:
    netty解决TCP的拆包和粘包的解决办法
    HTML图片热区map area的用法
    JWT应用
    React-router4简约教程
    axios中文文档
    如何区分Babel中的stage-0,stage-1,stage-2以及stage-3(一)
    python datetime offset-aware与offset-navie相互转换
    DJango跨域中间键
    Javacript实现倒计时
    CAN协议,系统结构和帧结构
  • 原文地址:https://www.cnblogs.com/wanghang/p/6298909.html
Copyright © 2011-2022 走看看