app ios 图片放哪
2015-05-22 11:28:35 dave_hz 阅读数 383

iOS App图片的处理:

 

背景:由于手机分辨率的多样化,以及设备像素比率的差异,同一张图片在不同设备上的展示效果差异会很大;所以,如何能够让使用不同设备的用户拥有一致友好的观感,是一个非常重要的问题。

 

图标:按照现在业内比较成熟的做法,只需要做2X、3X的就可以了。

具体来说:

1、  在高分辨率的情况下使用3X ,如iPhone 6、iPhone 6 plus

2、  在低分辨率的情况下使用2X ,如iphone 5及更低版本

 

业务图片处理

业务图片最重要的是产品图即我们现在所说的房源图——本文重点的讨论对象。

 

方案一:在不考虑流量、加载速度的情况下,为了能够让用户看到更清晰的图像,所有设备以最高分辨率为基准。图片分三种规格

1、  缩略图 —— 应用场景:首页房源列表、聊天中提到的房源信息等

2、  中图   —— 应用场景:点击随略图,快速浏览

3、  原始图或大图 —— 应用场景:房源详细页

根据上传的原图,服务器端需要生成2种或3不同尺寸的图片并存储到相对应的文件夹中(如:bigmiddlesmall),这样方便客户端在需要时可以根据不同的图片尺寸来获取对应的URL

 

方案二:在考虑流量、加载速度的情况下,为了能够让用户看到更清晰的图像,设备使用的图片区分2X、3X。图片分三种规格。

1、  缩略图 —— 应用场景:首页房源列表、聊天中提到的房源信息等

2、  中图   —— 应用场景:点击随略图,快速浏览

3、  原始图或大图 —— 应用场景:房源详细页

此方案会存储大量的图片

        

方案三:使用第三方库管理图片,如http://docs.upyun.com/

此方案包含了图片上传、分片上传、cbn等统一解决方案,可自定义图片分辨率,不支持强制刷新缓存,更多详细信息,可查看文档。

使用此方案,能够节约开发成本。

 

 

总结

1、图标的使用基本没有障碍,参考主流做法。

2、业务图片推荐使用方案一,方案三也可以考虑。


2015-02-28 10:09:52 jxncwzb 阅读数 1127
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%

2017-09-29 09:07:09 zhyxblog 阅读数 650

1. 打开itunes

2. 在右上角搜索"wechat",在列表中选择wechat



3. 从结果中选择微信,并下载


4. 接着选择"Library",进入你已经下载的App,这时你会看到微信app

5. 右击之后,在下拉菜单中选择"Show in Finder"


6. 这样你来到了微信存储的实际位置


7. 之后改后缀名为.zip,然后双击解压


8. 然后进入Payload文件夹,右击WeChat,选择"Show Package Content"


9. 这时候App的核心文件就展现在面前了,大部分的图片,都存在一个叫做Assets.car的文件里


10. 这时,我们需要一个第三方App来把Assets.car文件打开。我用的是"Asset Catalog Tinkerer"


11. 下载之后打开Tinkerer,选择想要打开的Assets.car,为了方便定位,可以直接将其拷贝到桌面上


12. Boom! 这时你会看到所有微信的图片,如图所示,看到摇一摇,是不是很熟悉


13. 如果你想保存这些图片,那么选择"Export All Images"。(我只是希望大家借鉴哦,这些图片也都是有版权的)



作者:流皓A
链接:http://www.jianshu.com/p/fd95a5f1b1cd
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2017-11-28 11:45:00 weixin_34365635 阅读数 22
3900768-f225cb823cdac9aa.png
{ADEDEE58-D85D-657F-4CE4-F97B57FA8A23}.png
3900768-76c9f2774c57cef9.png
{1B083C3B-C94E-EDD9-94D8-6B7CDC627ADE}.png
3900768-52ba1e97011dd3ab.png
{D21CA7BB-3D6A-2512-27D9-044D2CC4D165}.png
3900768-20c19de0582696f7.png
{B238CE22-627C-33DC-CE12-F208C5804B07}.png
3900768-b19fe6be92ac66ae.png
{2019B278-D3B2-9DDE-BCA1-0C8429F140EE}.png
3900768-b318864c0ce43fe7.png
屏幕快照 2017-11-28 下午1.14.03.png
3900768-78a886ee7d0b300a.png
屏幕快照 2017-11-28 下午1.29.11.png

3900768-136479a916db433b.png
3900768-5ec117614a4ba876.png
3900768-aa4419f0a72f03cc.png
{6D6DDDBA-D45F-F19A-7A2D-AFC521B7CB11}.png
3900768-b578709d12e1fcef.png
{FBE8AAA7-81B0-363D-A62D-1A1F1E30E29D}.png
3900768-3a834736bd550174.png
{F5C46FA7-04EE-0CEA-1606-8AE71CB19FB7}.png
3900768-e82f8df486ff792b.png
{7C7BFDF7-FB43-4544-7FB6-592571140939}.png
3900768-30c41f189557b9cd.png
{A37D03C7-A037-212F-963F-E01564539962}.png
2017-06-26 13:40:00 weixin_34212762 阅读数 15

一、图片展示


展示图片 时候 固定 了imageView的大小 图片 也裁剪了 尽量保持比例 可是 还是失真 变形了

2461501-e4b6f9b7a520378f.jpg

这张图 ui 要求展示的UIimageView 大小是固定 的 ,传过来的 图片 是这样的比例大小
2461501-22ad1c4d777d686e.jpg

这么大的图呢 比例 完全 不对等
imageView 的contentMode 属性 网上有个 很形象的例子
2461501-05ff307b2437af23.png

但是 尽量 其中UIViewContentModeScaleAspectFill会保证图片比例不变,但是是填充整个ImageView的
但是 我使用的情况 比例严重不符合要求 所以 变形的非常明显
这个时候 关键代码就是

imageView.clipsToBounds = YES;  

When YES, content and subviews are clipped to the bounds of the view. Default is NO.
这里的clip是修剪的意思,bounds是边界的意思是,合起来就是:如果子视图的范围超出了父视图的边界,那么超出的部分就会被裁剪掉。 那么图片 就会按比例显示 尽管 图片不会显示全 这也是合理的吧哈哈
使用了 这个 clipsToBounds 属性 贴张成果展示
完美!!!

2461501-64ca5bb803116cd7.png

二、图片上传


需求

服务器人员说图片最大只能为1M,图片质量要求尽量清晰,不得裁剪。

思路

先调整分辨率,再调整图片质量系数

代码实现

1.调用

    //图片压缩
    NSData *compressData = [NSData compressImage:image toByte:compressImageByte];
    
    NSLog(@"压缩数据大小:%.4f MB",(double)compressData.length/1024.0f/1024.0f);
    return compressData;

2.实现代码

NSData+TGCompress.h

#import <Foundation/Foundation.h>

@interface NSData (TGCompress)
/**
 *  图片压缩
 *
 *  @param image     要被压缩的图片
 *  @param maxLength 目标大小
 *
 *  @return 最终图片data
 */
+ (NSData *)compressImage:(UIImage *)image toByte:(NSUInteger)maxLength;
@end
NSData+TGCompress.m
#import "NSData+TGCompress.h"

@implementation NSData (TGCompress)
+ (NSData *)compressImage:(UIImage *)image toByte:(NSUInteger)maxLength {
    // Compress by quality
    CGFloat compression = 1;
    NSData *data = UIImageJPEGRepresentation(image, compression);
    NSLog(@"Before compressing quality, image size = %ld KB",data.length/1024);
    if (data.length < maxLength) return data;
    
    CGFloat max = 1;
    CGFloat min = 0;
    for (int i = 0; i < 6; ++i) {
        compression = (max + min) / 2;
        data = UIImageJPEGRepresentation(image, compression);
        //        NSLog(@"Compression = %.1f", compression);
        //        NSLog(@"In compressing quality loop, image size = %ld KB", data.length / 1024);
        if (data.length < maxLength * 0.9) {
            min = compression;
        } else if (data.length > maxLength) {
            max = compression;
        } else {
            break;
        }
    }
    
    //    NSLog(@"After compressing quality, image size = %ld KB", data.length / 1024);
    
    if (data.length < maxLength) return data;
    UIImage *resultImage = [UIImage imageWithData:data];

    // Compress by size
    NSUInteger lastDataLength = 0;
    while (data.length > maxLength && data.length != lastDataLength) {
        lastDataLength = data.length;
        CGFloat ratio = (CGFloat)maxLength / data.length;
        //      NSLog(@"Ratio = %.1f", ratio);
        CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)),
                                 (NSUInteger)(resultImage.size.height * sqrtf(ratio))); // Use NSUInteger to prevent white blank
        UIGraphicsBeginImageContext(size);
        [resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
        resultImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        data = UIImageJPEGRepresentation(resultImage, compression);
        //        NSLog(@"In compressing size loop, image size = %ld KB", data.length / 1024);
    }
    //    NSLog(@"After compressing size loop, image size = %ld KB", data.length / 1024);
    return data;
}

@end

具体原理见我的这篇文章iOS 图片压缩限制大小最优解

ios app图片角标

阅读数 747

iOSapp在启动过程的设置图片的规格

博文 来自: guoyule2010
没有更多推荐了,返回首页