iOS App 瘦身法之图片

1、纯色图 颜色不同 用一张图

瘦身代码

- (UIImage *)imageColorDraw:(UIColor *)color
{
    CGSize size = self.size;
    CGFloat scale = [OSConfigService sharedInstance].screenScale;

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, size.width * scale, size.height*scale, 8, 4 * size.width * scale, colorSpace,CG_IMAGE_ALPHA_PREMULTIPLIED_LAST);
    CGContextSetFillColorWithColor(context, color.CGColor);

    CGMutablePathRef path = CGPathCreateMutable();
    CGRect rect = CGRectMake(0, 0 ,size.width * scale, size.height * scale);
    CGContextClipToMask(context, rect, self.CGImage);
    CGPathAddRect(path, NULL, rect);
    CGContextAddPath(context, path);
    CGContextFillPath(context);
    CGPathRelease(path);
    CGContextStrokePath(context);

    CGImageRef imageRef = CGBitmapContextCreateImage(context);
    UIImage *newImage = [UIImage imageWithCGImage:imageRef scale:scale orientation:UIImageOrientationUp];
    CGImageRelease(imageRef);

    CGColorSpaceRelease(colorSpace);
    CGContextRelease(context);
    return newImage;
}

    rightButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [rightButton setImage:[UIImage imageNamed:@"shelf_navigationbar_search.png"] forState:UIControlStateNormal];
    [rightButton setImage:[[UIImage imageNamed:@"shelf_navigationbar_search.png"] imageColorDraw:RGB(245, 173, 156)] forState:UIControlStateHighlighted];
    [rightButton addTarget:self action:@selector(onRightButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [rightButton sizeToFit];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
    return backButton;

2、图片控件大小不一,用一张默认图

瘦身代码

    self.contentMode = UIViewContentModeCenter;
    self.backgroundColor = [UIColor colorWithHex:0xf8f8f8];
    self.image = [UIImage imageNamed:@"defaultImage.png"];
    __weak typeof(self) weakSelf = self;
    [self setImageWithURLString:URLString block:^(UIImage *image) {
        if (image) {
            weakSelf.contentMode = UIViewContentModeScaleToFill;
            weakSelf.backgroundColor = [UIColor whiteColor];
            weakSelf.image = image;
        }
    }];

3、Button按下换背景 不用图片

瘦身代码

#import "TBRBaseButton.h"

@interface TBRBaseButton ()

@property (nonatomic, STRONG) NSMutableDictionary *backgrounds;

@end

@implementation TBRBaseButton

- (NSMutableDictionary *)backgrounds
{
    if (_backgrounds == nil)
    {
        _backgrounds = [NSMutableDictionary dictionary];
    }
    return _backgrounds;
}

- (void)dealloc
{
    RELEASE(_backgrounds);
}

- (void)setBackgroundColor:(UIColor *)color forState:(UIControlState)state
{
    [self.backgrounds setObject:color forKey:[NSNumber numberWithInt:state]];

    if (!self.backgroundColor || state == UIControlStateNormal)
    {
        self.backgroundColor = color;
    }
}

- (void)setBackgroundToColor:(NSNumber *)key
{
    UIColor *background = [self.backgrounds objectForKey:key];
    if (KIND_OF_CLASSE(background, UIColor))
    {
        [UIView animateWithDuration:0.1f animations:^{
            self.backgroundColor = background;
        }];
    }
}

- (void)setEnabled:(BOOL)theEnabled
{
    [super setEnabled:theEnabled];

    if (!theEnabled)
    {
        [self setBackgroundToColor:[NSNumber numberWithInt:UIControlStateDisabled]];
    }
    else
    {
        [self setBackgroundToColor:[NSNumber numberWithInt:UIControlStateNormal]];
    }
}

- (void)setSelected:(BOOL)theSelected
{
    [super setSelected:theSelected];

    if (theSelected)
    {
        [self setBackgroundToColor:[NSNumber numberWithInt:UIControlStateSelected]];
    }
    else
    {
        [self setBackgroundToColor:[NSNumber numberWithInt:UIControlStateNormal]];
    }
}

- (void)setHighlighted:(BOOL)theHighlighted
{
    [super setHighlighted:theHighlighted];

    if (theHighlighted)
    {
        [self setBackgroundToColor:[NSNumber numberWithInt:UIControlStateHighlighted]];
    }
    else
    {
        [self setBackgroundToColor:[NSNumber numberWithInt:UIControlStateNormal]];
    }
}

@end

4、用 ImageAlpha 压缩包里的图片;可压缩 20%~50%

时间: 2024-11-13 16:51:06

iOS App 瘦身法之图片的相关文章

iOS App 瘦身方案

缩减iOS安装包大小是很多中大型APP都要做的事,一般首先会对资源文件下手,压缩图片/音频,去除不必要的资源.这些资源优化做完后,我们还可以尝试对可执行文件进行瘦身,项目越大,可执行文件占用的体积越大,又因为AppStore会对可执行文件加密,导致可执行文件的压缩率低,压缩后可执行文件占整个APP安装包的体积比例大约有80%~90%,还是挺值得优化的.下面介绍一下在研究可执行文件过程中发现的可以优化的点.研究的过程使用了linkmap,linkmap的介绍跟生成可以参考另一篇文章—iOS可执行文

java接受安卓及ios App上传的图片,并保存到阿里OSS

做后台的时候,写了两个方法,分别用来获取安卓和苹果IOS端上传的头像,保存到阿里云OSS图片存储服务器上.(SMM框架) 安卓及H5版本: 1 /** 2 * 上传用户头像 3 */ 4 @RequestMapping("/uploadPhoto") 5 public R uploadPhoto(@RequestParam("imgFile") MultipartFile imgFile, HttpServletRequest req) throws Excepti

安卓-APP瘦身优化

APP优化 APP瘦身 #1. 图片的优化 ☆☆☆☆☆ s1.png图片压缩裁剪,打包APP后资源文件分50k+大小图片重点优化,10k+图片选择优化: s2.图片资源格式处理(大小):.png > .jpg > .webp,条件合适选择应选择.webp: s3.使用矢量图: #2.开启混淆与压缩 ☆☆☆☆☆ s1.gradle shrinkResources设置为true,minifyEnabled设置为true: s2.gradle minifyEnabled可单独开启,shrinkRes

iOS 9 App 瘦身功能

App 瘦身简介 当前市场上存在大量的 iOS 设备,因此有多种屏幕尺寸和分辨率,要想保证一个 App 在多种屏幕下的展示效果需要大量的资源(比如 png.jpeg 以及二进制的 PDF).不幸的是,这导致用户需要下载一个巨大的程序包(之前的 iOS 版本强制用户下载全部 App 文件,包括他们在用 iPhone 时永远也不会用到的 iPad 适配图片).16G 的 iPhone 仍然有不少人在用(并且可能短时间内不会消失),所以你要缩小 App 体积从而可以快速下载并且保证用户有足够的空间.A

iOS获取app图标和启动图片名字(AppIcon and LaunchImage's name)

在某种场景下,可能我们需要获取app的图标名称和启动图片的名称.比如说app在前台时,收到了远程通知但是通知栏是不会有通知提醒的,这时我想做个模拟通知提示,需要用到icon名称:再比如在加载某个控制器时,想设置该控制器的背景图片为启动图片,需要用到启动图片名称. 而事实上icon图片放在系统AppIcon文件夹里,启动图片放在系统LaunchImage文件夹里,取这些图片的名称和其他一般资源图片名称不一样. 为了方便举例子,咱们先简单粗暴点 假设当前项目只支持iPhone设备,并且只支持竖屏:而

IOS APP 国际化(实现不跟随系统语言,不用重启应用,代码切换stroyboard ,xib ,图片,其他资源)

接了个变态的需求,要在程序内切换程序语言实现国际化. 可以先看看这个,比较详细. http://blog.csdn.net/xwren362922604/article/details/17190061 看完之后问题来了, 1,工程里面大量的 xib  或 storyboard 里面的UI 设定了text ,怎么实现让它们动态加载语言[非设置系统语言重启] 2,一个简单的思路,当代码触发切换语言 发个通知让 内存里的viewController 刷新UI的text .[工程里这么都vc 每个都加

IOS APP圆形图片的实现

1 //设置圆形cornerRadius,是宽或高的一半 2 3 _imageView.layer.masksToBounds = YES; 4 5 6 7 CGFloat w = _imageView.frame.size.width / 2; 8 9 _imageView.layer.cornerRadius = w; 10 11 12 13 //设置边框宽度及颜色 14 15 [_imageView.layersetBorderWidth:2]; 16 17 [_imageView.lay

【转】app瘦身

iPhone经过这几年的发展,已经发生了很大的变化,例如屏幕变得更加多样,尺寸更多,内存变得更大,CPU的架构也在变化.伴随着iPhone的变化,iOS也在变化,例如AutoLayout.size classes.split view controller等.这些技术及设备的变化给我在开发的过程中也造成了许多的问题,不仅如此苹果通过不断推出新的技术,努力在帮助我们使用同一套代码开发适应多个设备的Universal的App.另一方面Universal App虽然在开发的过程中,方便了我们开发人员,

用Xamarin和Visual Studio编写iOS App

一说开发 iOS app,你立马就会想到苹果的开发语言 Objective C/Swift 和 Xcode.但是,这并不是唯一的选择,我们完全可以使用别的语言和框架. 一种主流的替换方案是 Xamarin,这是一个跨平台框架,允许你开发 iOS.Android 和 OSX.Windows app,它使用的是 C# 和 Visual Studio.最大的好处在于,Xamarin 允许你在 iOS 和 Android app 间共享代码. Xamarin 与其他跨平台框架相比有一个最大的好处:使用