赞
踩
只有创建了应用才能使用这个api
首先百度搜索百度大脑ai studio
注册账号后
打开控制台
在控制台的产品服务当中 选中图像增强与特效
点击创建应用
应用名称 应用描述 随便写就好 接口选择 默认的就好不用改 应用归属 个人就好
创建成功以后点击管理应用
将下面这三个appID API Key Secret Ket 记下来 等会打代码的时候要用到 我们需要用这三个来获取使用图像增强与特效api的权限
点击左侧技术文档
打开以后选中调用方式(因为我们是使用api所以是api文档下的调用方式 如果是SDK就看下面的)
由下面这句话可以知道我们要使用这个api就要先获取access token
打开visual studio 2017
新建一个winform项目
在窗口中添加一个按钮button(用来触发执行这个api)和一个pictureBox(用来显示api执行后返回的已经动漫化图片)名字不用修改 免得等会复制下面的代码出错
因为有些用到的函数需要对应的SDK支持
打开刚刚浏览器的百度控制台页面点击SDK下载
然后下载C# 的SDK
下载 解压后 记住解压后文件的位置
打开刚刚vs2017创建的项目 点击添加引用
预览找到刚刚SDk解压后的位置
这里选择其中一个版本就好 我这里选中40版本 里面的dll 点击添加 再点击确定
添加完成后再次打开引用窗口 添加system.web引用
添加完成后
选中窗体打开代码区
然后再顶部添加命名以下几个需要用到的命名空间
using System.IO;
using System.Net.Http;
using System.Net;
using System.Web;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
然后在窗口类的下面新建一个token类用来获取access token
参考地址
这里面的clientId和clientSecret 的值是上面 第一步我们记下来的App Key和Secret Key 注意复制下面代码后记得将这两个值替换过来
public static class Token { // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存 // 返回token示例 public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567"; // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务 private static String clientId = "App Key"; // 百度云中开通对应服务应用的 Secret Key private static String clientSecret = "Secret Key"; /// <summary> /// 获取token 但是获取到的 字符串中 含有"refresh_token" 和"access_token" 等其他信息所以需要将result转换为JObject提取出access_token /// </summary> /// <returns></returns> public static String getAccessToken() { String authHost = "https://aip.baidubce.com/oauth/2.0/token"; HttpClient client = new HttpClient(); List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>(); paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials")); paraList.Add(new KeyValuePair<string, string>("client_id", clientId)); paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret)); HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result; String result = response.Content.ReadAsStringAsync().Result; return result; } }
然后再窗口类里面添加下面两个函数
参考地址
/// <summary> /// 输入本地图片(包含路径)将图片转换为Base64编码 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static String getFileBase64(String fileName) { FileStream filestream = new FileStream(fileName, FileMode.Open); byte[] arr = new byte[filestream.Length]; filestream.Read(arr, 0, (int)filestream.Length); string baser64 = Convert.ToBase64String(arr); filestream.Close(); return baser64; } /// <summary> /// 将base64编码转换为图片 /// </summary> /// <param name="base64String"></param> /// <returns></returns> public Image ConvertBase64ToImage(string base64String) { byte[] imageBytes = Convert.FromBase64String(base64String); using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length)) { ms.Write(imageBytes, 0, imageBytes.Length); return Image.FromStream(ms, true); } }
然后为button1添加一个click事件
然后复制下面代码进去
参考地址
注意复制下面代码后要将需要人像动漫画的图片的本地路径修改过来
//获取token string token = "[调用鉴权接口获取的token]"; token = Token.getAccessToken(); //将获取到的token转换为JObject并提取出access_token对应的字符串 JObject j = JObject.Parse(token); string userid = j["access_token"].ToString(); token = userid; //发起https请求 string host = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "post"; request.KeepAlive = true; // 获取图片的base64编码 string base64 = getFileBase64(@"C:\Users\小何程序员\Desktop\截图\chrome_OAAvj9142x.png"); String str = "image=" + HttpUtility.UrlEncode(base64); //调用api执行转换操作 byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); //将执行后返回的动漫化后的图片的base64码转换为图片 放到picturebox中 JObject j1 = JObject.Parse(result); pictureBox1.Image = ConvertBase64ToImage(j1["image"].ToString());
然后运行程序 点击按钮 效果如下
原图是
大功告成
再次提醒 赋值后 注意替换
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Net.Http; using System.Net; using System.Web; using Newtonsoft.Json.Linq; using Newtonsoft.Json; namespace baidu_api_blog_showHow { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //获取token string token = "[调用鉴权接口获取的token]"; token = Token.getAccessToken(); //将获取到的token转换为JObject并提取出access_token对应的字符串 JObject j = JObject.Parse(token); string userid = j["access_token"].ToString(); token = userid; //发起https请求 string host = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "post"; request.KeepAlive = true; // 获取图片的base64编码 string base64 = getFileBase64(@"C:\Users\小何程序员\Desktop\截图\chrome_OAAvj9142x.png"); String str = "image=" + HttpUtility.UrlEncode(base64); //调用api执行转换操作 byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); //将执行后返回的处理过的图片的base64码转换为图片 JObject j1 = JObject.Parse(result); pictureBox1.Image = ConvertBase64ToImage(j1["image"].ToString()); } /// <summary> /// 输入本地图片(包含路径)将图片转换为Base64编码 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static String getFileBase64(String fileName) { FileStream filestream = new FileStream(fileName, FileMode.Open); byte[] arr = new byte[filestream.Length]; filestream.Read(arr, 0, (int)filestream.Length); string baser64 = Convert.ToBase64String(arr); filestream.Close(); return baser64; } /// <summary> /// 将base64编码转换为图片 /// </summary> /// <param name="base64String"></param> /// <returns></returns> public Image ConvertBase64ToImage(string base64String) { byte[] imageBytes = Convert.FromBase64String(base64String); using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length)) { ms.Write(imageBytes, 0, imageBytes.Length); return Image.FromStream(ms, true); } } } public static class Token { // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存 // 返回token示例 public static String TOKEN = "24.adda70c11b9786206253ddb70affdc46.2592000.1493524354.282335-1234567"; // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务 private static String clientId = "API Key"; // 百度云中开通对应服务应用的 Secret Key private static String clientSecret = "Secret Key"; /// <summary> /// 获取token 但是获取到的 字符串中 含有"refresh_token" 和"access_token" 等其他信息需要转换为JObject提取出access_token /// </summary> /// <returns></returns> public static String getAccessToken() { String authHost = "https://aip.baidubce.com/oauth/2.0/token"; HttpClient client = new HttpClient(); List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>(); paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials")); paraList.Add(new KeyValuePair<string, string>("client_id", clientId)); paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret)); HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result; String result = response.Content.ReadAsStringAsync().Result; return result; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。