百度美图

摘要

使用百度API获取美图,然后使用JSONKit解析获取的结果,最后使用SDWebImage展示图片,当然也可以使用[UIImage
imageWithData:[NSData dataWithContentsOfURL:url]]
显示图片,不过开源的SDWebImage在这有点大材小用。使用手势左滑和右滑实现图片切换。

结果展示

主要技术点

  • 使用第三方开源库。本来想自己直接把源代码加到工程里面的,然后自己配置库、框架之类的,发现挺麻烦的,各种出错。后来发现了第三方开源库管理工具cocoapods,试了下效果过程都还可以,所以直接用了这个工具配置文中所用的第三方开源库,以后全部的开发就在.xcworkspace打开的工程里面开发调试了。cocoapods使用方法如下所示:
xxx $ : gem sources --remove https://rubygems.org/ # 移除官方下载链接,因为被墙
xxx $ : $ gem sources -a http://ruby.taobao.org/ # 添加国内可用下载链接
xxx $ : sudo gem install cocoapods  # 安装
xxx-baiduImageShow $ : touch Podfile # 在项目根目录新建文件,文件内容为
    ```
      1 platform :ios, '6.1'
      2 pod 'SDWebImage', '~>3.6'
      3 pod 'JSONKit'
    ```
xxx-baiduImageShow $ : pod install # 构建第三方库,生成.xcworkspace工程文件
  • 第三方开源库`JSONKit`编译的时候需要把isa关闭,否则会出错(IOS6以上的版本)。[解决方法](http://blog.csdn.net/hemuhan/article/details/17753453)为:从项目中搜索
    Direct usage of ‘isa‘ 将 YES(treat as error)
    改为NO
  • 获取百度图片的时候,发现pn代表的不是页,而是开始的索引号。

主要代码

//
//  ViewController.m
//  baiduImageShow
//
//  Created by wangwei on 14/12/30.
//  Copyright (c) 2014年 arbboter. All rights reserved.
//

#import "ViewController.h"
#import <SDWebImage/UIImageView+WebCache.h>
#import <JSONKit/JSONKit.h>

#define SDWebImage

@interface ViewController ()

@property (nonatomic, strong) UIImageView* baiduImage;
@property (nonatomic, strong) UISwipeGestureRecognizer* toLeft;
@property (nonatomic, strong) UISwipeGestureRecognizer* toRight;
@property (nonatomic, strong) NSMutableArray* baiduImageArray;
@property (nonatomic, strong) NSString* baiduImageResult;
@property (nonatomic, readwrite) NSInteger currentImageIndex;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    _baiduImage = [[UIImageView alloc] initWithFrame:self.view.frame];
    _baiduImage.contentMode = UIViewContentModeScaleAspectFill;
    _baiduImage.userInteractionEnabled = YES;
    [self.view addSubview:_baiduImage];

    /** 右滑手势 */
    _toRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(imageWillChange:)];
    _toRight.direction = UISwipeGestureRecognizerDirectionRight;

    /** 左滑手势 */
    _toLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(imageWillChange:)];
    _toLeft.direction = UISwipeGestureRecognizerDirectionLeft;

    [_baiduImage addGestureRecognizer:_toLeft];
    [_baiduImage addGestureRecognizer:_toRight];

    _baiduImageArray = [[NSMutableArray alloc] init];
    _currentImageIndex = 0;

    NSURL* url = [[NSURL alloc] initWithString:@"http://b.hiphotos.baidu.com/image/pic/item/aa18972bd40735fa7ffc3dc29d510fb30f2408b8.jpg"];
    _baiduImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

}

- (void) updateImage
{
    /** 预加载 */
    if(_baiduImageArray.count-_currentImageIndex<5)
    {
        static NSInteger pn = 0;
        NSInteger pageNum=20;
        [self addMoreImage:[NSString stringWithFormat:@"http://image.baidu.com/channel/listjson?pn=%ld&rn=%ld&tag1=美女&tag2=全部&ftags=校花&ie=utf8", pn, pageNum]];
        pn += pageNum;
    }
}

/**
 *  从网络请求新的图片
 *
 *  @param urlString 请求地址
 */
- (void) addMoreImage:(NSString*)urlString
{
    /** 转换成utf-8格式的请求 */
    _baiduImageResult = nil;
    urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURL* url = [[NSURL alloc] initWithString:urlString];
    NSURLRequest* request = [[NSURLRequest alloc] initWithURL:url];
    [NSURLConnection connectionWithRequest:request delegate:self];
}

#pragma NSURLConnectionDelegate协议
// 收到数据调用该方法,可能不是一次性收到所有数据,所以..
- (void)connection:(NSURLConnection *)connection
    didReceiveData:(NSData *)data
{
    NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    if([_baiduImageResult length])
    {
        _baiduImageResult  = [_baiduImageResult stringByAppendingString:str];
    }
    else
    {
        _baiduImageResult = str;
    }
}

// 数据接收完成调用该方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    /** 利用JSONKit的NSString扩展解码 */
    NSDictionary* dict = [_baiduImageResult objectFromJSONString];

    //NSLog(@"result ->\n%@", dict);

    NSArray *array = [dict objectForKey:@"data"];
    NSString* url = nil;
    for (NSInteger i=1; i<array.count; i++)
    {
        url = [[array objectAtIndex:i-1] objectForKey:@"image_url"];
        [_baiduImageArray addObject:url];
    }
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"Request failed -> %@", error.description);
}

/**
 *  滑动切换图片时的事件处理
 *
 *  @param sender 手势发送者
 */
- (void)imageWillChange:(id)sender
{
    if (sender == _toRight)
    {
        if(_currentImageIndex-2 >= 0)
        {
            _currentImageIndex--;
            [_baiduImage sd_setImageWithURL:[_baiduImageArray objectAtIndex:_currentImageIndex-1]];
        }
    }
    else if(sender == _toLeft)
    {
        [self updateImage];

        if(_currentImageIndex < _baiduImageArray.count)
        {
#ifdef SDWebImage
            NSURL* url = [[NSURL alloc] initWithString:@"http://b.hiphotos.baidu.com/image/pic/item/aa18972bd40735fa7ffc3dc29d510fb30f2408b8.jpg"];

            [_baiduImage sd_setImageWithURL:[_baiduImageArray objectAtIndex:_currentImageIndex++] placeholderImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:url]]];
#else
            NSURL* url = [[NSURL alloc] initWithString:[_baiduImageArray objectAtIndex:_currentImageIndex++]];
            _baiduImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
#endif
        }
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

时间: 2024-12-17 19:24:42

百度美图的相关文章

美图45亿美元估值赴港上市仅次腾讯,成10年来最大科技公司上市交易

作者:楠沨 [IT战略家] 根据汤森路透 IFR 的消息,美图公司目前暂定的发行价区间为每股 8.50 至 9.60 港元,折合 1.10 至 1.24 美元,最终定价将在 12 月 8 日公布. IPO总额为 7.35 亿美元,估值 45 亿美金.这将是今年仅次于Line的全球第二大技术类IPO,美图也将成为港股中仅次于腾讯的第二大互联网公司. 消息传出后,美图因招股书显示出来其大额亏损及变现模式不清晰引起争议.当前媒体兵分两路,一路直言其盈利模式单一并不看好,一路认为其可观的用户数据基础上,

美图上市,跟我有关系?

作为一名准美图员工,美图上市,我实在想不到跟我有什么关系.但事实上,我的今天已经因为这件事情而不一样. 早上,起的还算早,看了看中国地图.到了教研室,又尝试着自己画地图,果然,画的面目全非.今天,开始改新的一章,看了半天,没有理清思路,着急也无法下手.计算软硬件无非都是计算与通信,我是这样认为的.写作的时候,突然又对于图形计算的模型由点兴趣,但我不会去深究的.我可不想撑死.所以论文中本来有一部分内容是求全的,也果断的舍弃,不想花时间精力去调研. 下午,晚上,都是在缓慢的向前推进.中间,听了一会歌

人人都使用美颜自拍 美图公司却亏损越来越多?

最近有网友罗列了人类自拍的演变历,会心一笑之余才发现,原来自拍有如此深厚的历史渊源.而说到自拍,许多人的第一反应就是"一键美颜"或者"美图秀秀",今年初市场已有"美图秀秀"开发商美图公司将上市的消息,早前美图公司已向港交所递交表格,最新消息指,美图公司已通过上市聆讯,并将在下周开始路演,12月初公开招股,预计集资最多8亿美元,折合约62.4亿港元. 事实上早在2014年,美图公司就已经完成了A.B.C三轮融资,融资总额3.6亿美元,C轮融资后公司

谈可牛影像磨皮算法及其于美图秀秀之类软件磨皮的区别和联系。

在几年前写的一篇关于BEEP的文章时,我曾经说过Beep的去噪作用可以用于磨皮,并且给出了结论BEEP比可牛和美图等的效果要更为好,现在看来,那个结论确实是太为夸张和固定了.不同的人的审美观不同,同一个人在不同时段审美观也会有所差异,现在看来,我到时觉得可牛影像的带有肤质保留效果的磨皮更加自然,也更加符合实际的情况. 在前段日子里,又随意的百度了下PS的磨皮教程,看到了很多的曾经看过的例子,也看到了一些当时不以为然的文章.其中就包括http://www.missyuan.com/thread-4

美图秀秀美化版

美图秀秀可以轻松美化数码照片,独有一键P图.神奇美容.边框场景.超炫闪图等强 大功能,还有每日更新的海量素材.国内很多人在使用这款免费图片处理软件,1分钟 就能上手,据说比PS要简单100倍(^.^)!去除广告,禁止第三方分享等,亲测除了刚运 行软件时右下角有个推广美图秀秀安卓版的小弹窗外,别的都不错,可以放心使用. 百度下载:http://pan.baidu.com/s/1pJ9H851

美图故事,一个男人美的疯狂

一个八零后男人创造了一系列关于美的故事,让男人讨厌,让女人爱不释手. 美图公司刚在第十届金鹰节互联盛典中荣获年度公司奖,这家创建于2008年10月的公司开发了一系列与美有关的产品,有相当火热的美颜相机.美图秀秀.美拍,还有海报工厂.柚子相机.美图看看.表情工厂.美图贴贴.美陌等产品,而这一切都和美图秀秀创始人吴欣鸿分不开. 现在中国互联网.科技圈的成功公司创始人都有些草莽英雄的味道,他们也许没有令人眩晕的学历背景.彪悍的家世,但都在自己起起伏伏的人生里不怕失败,经得起起落,吴欣鸿应该也能算是其中

电脑小白学习第九课---看图软件之美图看看

windows下看图软件有很多,windows系统自带的也有看图软件,不过很难用.今天推荐大家使用美图看看软件,查看电脑图片.我们先下载这个软件,在百度搜索"美图看看",如下图所示,直接下载即可.然后双击刚下载的安装程序,开始安装.把下图勾选框的勾去掉,安装目录默认即可,点击"安装".取消下图那个勾选,然后点击"完成",完成软件的安装.找到一个图片,右击,选择打开方式,选择其他应用.在弹出窗口选择"美图看看",并勾选"

美图分布式Bitmap实践:Naix

本文系美图互联网技术沙龙第 11 期嘉宾分享内容 大数据技术和应用系统目前已经在各个行业中发挥着巨大的作用,各种各样的开源技术也给大数据从业人员带来了很大的便利.Bitmap 作为一种大数据需求下产生的计算体系,有着计算速度快.信息密度高.支持海量数据等众多优势. 美图拥有海量用户数据,每天都有大量数据计算任务.而 Bitmap 技术能大幅度减少计算的开销,节省数据存储的成本,尽管有不少公司做过 Bitmap 的相关尝试,但是到目前为止还没有一个相对成熟的分布式 Bitmap 开源应用,因此美图

开源一个完整的iOSApp《丁丁美图》供初学者学习

学习iOS开发的时候,得益于开源社区的大量开源项目,去年开始购买了个人开发者账号,写了这个练手项目<丁丁美图>,并上传到了App Store(Ipad版本被驳回也懒得处理).现在将代码开源出来,供初学者学习吧. 项目简介 一款美图展示APP,使用著名图片分享网站500PX(https://500px.com/)的图片数据源,当初写它是为了学习整个APP的构思开发发布流程.同时我个人比较喜欢看一些美文美图,所以着手开发了这款APP.当时做iOS开发也不长,技术运用也不成熟.不过代码规范算是从那时