微信素材管理和群发这块文档对Java很不友好。本文只对新增临时素材,新增永久素材做介绍,其余获取、删除、修改自行补充

公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件、多媒体消息的获取和调用等操作,是通过media_id来进行的。素材管理接口对所有认证的订阅号和服务号开放。

素材的限制

图片(image): 2M,支持PNG\JPEG\JPG\GIF格式

语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式

视频(video):10MB,支持MP4格式

缩略图(thumb):64KB,支持JPG格式

一、新增临时素材

接口:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE,再传一个媒体文件类型,可以是图片(image)、语音(voice)、视频(video)和缩略图(thumb)。

1、订阅号和服务号要通过认证

2、临时素材media_id是可复用的

3、媒体文件在微信后台保存时间为3天,即3天后media_id失效。

/**

* 上传临时素材(本地)

*

* @param accessToken

* @param type

* 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)

* @param path

* 图片路径

* @return

*/

public static UploadMediasResult uploadTempMediaFile(String accessToken, String type, String path) {

UploadMediasResult result = null;

TreeMap params = new TreeMap<>();

params.put("access_token", accessToken);

params.put("type", type);

try {

String json = HttpsUploadMediaFile(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_TEMP_MEDIA_TYPE_URL,

params, path);

result = JsonUtil.fromJsonString(json, UploadMediasResult.class);

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

/**

* 上传临时素材(网络)

*

* @param accessToken

* @param type

* 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)

* @param path

* 图片路径

* @return

*/

public static UploadMediasResult uploadTempMedia(String accessToken, String type, String path) {

UploadMediasResult result = null;

TreeMap params = new TreeMap<>();

params.put("access_token", accessToken);

params.put("type", type);

try {

String json = HttpsUploadMedia(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_TEMP_MEDIA_TYPE_URL, params,

path, 0, 0);

result = JsonUtil.fromJsonString(json, UploadMediasResult.class);

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

二、新增永久素材

接口:https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE,媒体文件类型,分别有图片(image)、语音(voice)、视频(video,例外)和缩略图(thumb)

/**

* 上传永久素材(本地)

*

* @param accessToken

* @param type

* 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)

* @return

*/

public static UploadMediasResult uploadForeverMediaFile(String accessToken, String type, String path) {

UploadMediasResult result = null;

TreeMap params = new TreeMap<>();

params.put("access_token", accessToken);

params.put("type", type);

try {

String json = HttpsUploadMediaFile(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_FOREVER_MEDIA_TYPE_URL,

params, path);

result = JsonUtil.fromJsonString(json, UploadMediasResult.class);

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

/**

* 上传永久素材(网络)

*

* @param accessToken

* @param type

* 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)

* @return

*/

public static UploadMediasResult uploadForeverMedia(String accessToken, String type, String path) {

UploadMediasResult result = null;

TreeMap params = new TreeMap<>();

params.put("access_token", accessToken);

params.put("type", type);

try {

String json = HttpsUploadMedia(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_FOREVER_MEDIA_TYPE_URL, params,

path, 0, 0);

result = JsonUtil.fromJsonString(json, UploadMediasResult.class);

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

新增永久视频素材需特别注意,在上传视频素材时需要POST另一个表单,id为description,包含素材的描述信息title和introduction,内容格式为JSON

/**

* 上传永久素材(video)

*

* @param accessToken

* @return

*/

public static String uploadForeverMediaFile(String accessToken, String title, String introduction, String path) {

TreeMap params = new TreeMap<>();

params.put("access_token", accessToken);

params.put("type", "video");

String mediaId = null;

try {

String json = HttpsUploadVideoMediaFile(SystemConfig.POST_METHOD,

WechatConfig.UPLOAD_FOREVER_MEDIA_TYPE_URL, params, path, title, introduction);

mediaId = JsonUtil.fromJsonString(json, "media_id");

} catch (Exception e) {

e.printStackTrace();

}

return mediaId;

}

/**

* 上传永久素材(video,网络)

*

* @param accessToken

* @return

*/

public static String uploadForeverMedia(String accessToken, String title, String introduction, String path) {

TreeMap params = new TreeMap<>();

params.put("access_token", accessToken);

params.put("type", "video");

String mediaId = null;

try {

String json = HttpsUploadVideoMedia(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_FOREVER_MEDIA_TYPE_URL,

params, path, title, introduction, 0, 0);

mediaId = JsonUtil.fromJsonString(json, "media_id");

} catch (Exception e) {

e.printStackTrace();

}

return mediaId;

}

三、新增永久图文素材

接口:https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN,post信息参见UploadNewsMedia 实体类

对于常用的素材,开发者可通过本接口上传到微信服务器,永久使用.

1、永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽)。

2、公众号的素材库保存总数量有上限:图文消息素材、图片素材上限为5000,其他类型为1000。

3、图文消息的具体内容中,微信后台将过滤外部的图片链接,图片url需通过"上传图文消息内的图片获取URL"接口上传图片获取。

4、"上传图文消息内的图片获取URL"接口所上传的图片,不占用公众号的素材库中图片数量的5000个的限制,图片仅支持jpg/png格式,大小必须在1MB以下。

5、图文消息支持正文中插入自己帐号和其他公众号已群发文章链接的能力。

/**

* 上传永久图文消息的素材

*

* @param accessToken

* 授权token

* @param entity

* 图文消息对象

* @return

*/

public static UploadMediasResult uploadNewsMedia(String accessToken, List entity) {

UploadMediasResult result = null;

TreeMap params = new TreeMap<>();

params.put("access_token", accessToken);

// post 提交的参数

TreeMap> dataParams = new TreeMap>();

dataParams.put("articles", entity);

String data = JsonUtil.toJsonString(dataParams);

String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD,

WechatConfig.UPLOAD_FOREVER_NEWS_MEDIA_URL, params, data);

result = JsonUtil.fromJsonString(json, UploadMediasResult.class);

return result;

}

四、上传图文消息内的图片获取URL

接口:https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN

本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下,此接口返回的url就是上传图片的URL,可放置图文消息中使用。

/**

* 上传图文消息内的图片获取URL(本地)

*

* @param accessToken

* @param path

* @return

*/

public static String uploadImgMediaFile(String accessToken, String path) {

TreeMap params = new TreeMap<>();

params.put("access_token", accessToken);

String url = null;

try {

String json = HttpsUploadMediaFile(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_IMG_MEDIA_URL, params,

path);

url = JsonUtil.fromJsonString(json, "url");

} catch (Exception e) {

e.printStackTrace();

}

return url;

}

/**

* 上传图文消息内的图片获取URL(网络)

*

* @param accessToken

* @param path

* @return

*/

public static String uploadImgMedia(String accessToken, String path) {

TreeMap params = new TreeMap();

params.put("access_token", accessToken);

String url = null;

try {

String json = HttpsUploadMedia(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_IMG_MEDIA_URL, params, path, 0,

0);

url = JsonUtil.fromJsonString(json, "url");

} catch (Exception e) {

e.printStackTrace();

}

return url;

}

五、部分工具类

配置类

public static final String UPLOAD_IMG_MEDIA_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadimg";

public static final String UPLOAD_FOREVER_NEWS_MEDIA_URL = "https://api.weixin.qq.com/cgi-bin/material/add_news";

public static final String UPLOAD_TEMP_MEDIA_TYPE_URL = "https://api.weixin.qq.com/cgi-bin/media/upload";

public static final String UPLOAD_FOREVER_MEDIA_TYPE_URL = "https://api.weixin.qq.com/cgi-bin/material/add_material";

上传图文消息素材返回类

package com.phil.wechat.msg.model.media;

/**

* 上传图文消息素材返回的结果

* @author phil

* @date 2017年9月20日

*

*/

public class UploadMediasResult {

private String type; // 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb),次数为news,即图文消息

private String media_id; // 媒体文件/图文消息上传后获取的唯一标识

private String created_at; // 媒体文件上传时间

}

上传图文消息素材实体类

package com.phil.wechat.msg.model.media;

import java.io.Serializable;

/**

* 上传图文消息素材实体类

* @author phil

* @date 2017年9月20日

*/

public class UploadNewsMedia implements Serializable {

private static final long serialVersionUID = 6551817058101753854L;

private String thumb_media_id; // 图文消息缩略图的media_id,可以在基础支持-上传多媒体文件接口中获得

private String author; // 图文消息的作者

private String title; // 图文消息的标题

private String content_source_url; // 图文消息点击阅读原文的链接

private String content; // 图文消息页面的内容,支持HTML标签

private String digest; // 图文消息的描述

private int show_conver_pic; // 是否显示为封面 1表示显示为封面 0 不显示为封面

}

上传方法

/**

* 上传媒体文件(本地)

*

* @param method

* 请求方法 GET/POST

* @param path

* api的路径

* @param param

* api参数

* @param mediaPath

* 待上传的image/music 的path

* @return

* @throws Exception

*/

public static String HttpsUploadMediaFile(String method, String path, Map param, String mediaPath)

throws Exception {

String result = null;

URL url = new URL(setParmas(param, path, ""));

OutputStream output = null;

DataInputStream inputStream = null;

try {

File file = new File(mediaPath);

if (!file.isFile() || !file.exists()) {

throw new IOException("file is not exist");

}

HttpURLConnection con = (HttpURLConnection) url.openConnection();

con.setDoInput(true);

con.setDoOutput(true);

con.setUseCaches(false);

con.setRequestMethod(SystemConfig.POST_METHOD);

// 设置请求头信息

con.setRequestProperty("Connection", "Keep-Alive");

con.setRequestProperty("Charset", SystemConfig.DEFAULT_CHARACTER_ENCODING);

// 设置边界

String boundary = "----------" + System.currentTimeMillis();

con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

// 请求正文信息

// 第一部分

output = new DataOutputStream(con.getOutputStream());

IOUtils.write(("--" + boundary + "\r\n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write(("Content-Disposition: form-data;name=\"media\"; filename=\"" + file.getName() + "\"\r\n")

.getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write(

"Content-Type:application/octet-stream\r\n\r\n".getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING),

output);

// IOUtils.write(("Content-Type: "+ fileExt + "\r\n\r\n").getBytes(), output);

// 文件正文部分

// 把文件已流文件的方式 推入到url中

inputStream = new DataInputStream(new FileInputStream(file));

IOUtils.copy(inputStream, output);

// 结尾部分

IOUtils.write(("\r\n--" + boundary + "--\r\n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

output.flush();

result = inputStreamToString(con.getInputStream());

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (ProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

throw new IOException("read data error");

} finally {

IOUtils.closeQuietly(output);

IOUtils.closeQuietly(inputStream);

}

return result;

}

/**

* 上传媒体文件(不能本地)

*

* @param method

* 请求方法 GET/POST

* @param path

* api的路径

* @param param

* api参数

* @param mediaPath

* 待上传的image/music 的path

* @param connTime

* 连接时间 默认为5000

* @param readTime

* 读取时间 默认为5000

* @return

* @throws Exception

*/

public static String HttpsUploadMedia(String method, String path, Map param, String mediaPath,

int connTime, int readTime) throws Exception {

String result = "";

URL url = new URL(setParmas(param, path, ""));

OutputStream output = null;

BufferedInputStream inputStream = null;

try {

String boundary = "----";

HttpURLConnection conn = getConnection(method, url);

conn.setConnectTimeout(connTime == 0 ? DEFAULT_CONNTIME : connTime);

conn.setReadTimeout(readTime == 0 ? DEFAULT_UPLOAD_READTIME : readTime);

conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

output = conn.getOutputStream();

URL mediaUrl = new URL(mediaPath);

if (mediaUrl != null) {

HttpURLConnection mediaConn = (HttpURLConnection) mediaUrl.openConnection();

mediaConn.setDoOutput(true);

mediaConn.setUseCaches(false);

mediaConn.setRequestMethod(SystemConfig.GET_METHOD);

mediaConn.setConnectTimeout(connTime == 0 ? DEFAULT_CONNTIME : connTime);

mediaConn.setReadTimeout(readTime == 0 ? DEFAULT_UPLOAD_READTIME : readTime);

String connType = mediaConn.getContentType();

// 获得文件扩展

String fileExt = getFileExt(connType);

IOUtils.write(("--" + boundary + "\r\n").getBytes(), output);

IOUtils.write(("Content-Disposition: form-data; name=\"media\"; filename=\"" + getFileName(mediaPath)

+ "\"\r\n").getBytes(), output);

IOUtils.write(("Content-Type: " + fileExt + "\r\n\r\n").getBytes(), output);

inputStream = new BufferedInputStream(mediaConn.getInputStream());

IOUtils.copy(inputStream, output);

IOUtils.write(("\r\n----" + boundary + "--\r\n").getBytes(), output);

mediaConn.disconnect();

// 获取输入流

result = inputStreamToString(conn.getInputStream());

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (ProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

IOUtils.closeQuietly(output);

IOUtils.closeQuietly(inputStream);

}

return result;

}

/**

* 上传Video媒体文件(本地)

*

* @param method

* 请求方法 GET/POST

* @param path

* api的路径

* @param param

* api参数

* @param mediaPath

* 待上传的voide 的path

* @param title

* 视频标题

* @param introduction

* 视频描述

* @return

* @throws Exception

*/

public static String HttpsUploadVideoMediaFile(String method, String path, Map param,

String mediaPath, String title, String introduction) throws Exception {

String result = null;

URL url = new URL(setParmas(param, path, ""));

OutputStream output = null;

DataInputStream inputStream = null;

try {

File file = new File(mediaPath);

if (!file.isFile() || !file.exists()) {

throw new IOException("file is not exist");

}

HttpURLConnection con = (HttpURLConnection) url.openConnection();

con.setDoInput(true);

con.setDoOutput(true);

con.setUseCaches(false);

con.setRequestMethod(SystemConfig.POST_METHOD);

// 设置请求头信息

con.setRequestProperty("Connection", "Keep-Alive");

con.setRequestProperty("Charset", SystemConfig.DEFAULT_CHARACTER_ENCODING);

// 设置边界

String boundary = "----------" + System.currentTimeMillis();

con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

// 请求正文信息

// 第一部分

output = new DataOutputStream(con.getOutputStream());

IOUtils.write(("--" + boundary + "\r\n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write(("Content-Disposition: form-data;name=\"media\"; filename=\"" + file.getName() + "\"\r\n")

.getBytes(), output);

IOUtils.write("Content-Type: video/mp4 \r\n\r\n".getBytes(), output);

// 文件正文部分

// 把文件已流文件的方式 推入到url中

inputStream = new DataInputStream(new FileInputStream(file));

IOUtils.copy(inputStream, output);

// 结尾部分

IOUtils.write(("--" + boundary + "\r\n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write("Content-Disposition: form-data; name=\"description\";\r\n\r\n"

.getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write(("{\"title\":\"" + title + "\",\"introduction\":\"" + introduction + "\"}")

.getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write(("\r\n--" + boundary + "--\r\n\r\n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING),

output);

output.flush();

result = inputStreamToString(con.getInputStream());

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (ProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

throw new IOException("read data error");

} finally {

IOUtils.closeQuietly(output);

IOUtils.closeQuietly(inputStream);

}

return result;

}

/**

* 上传Video媒体文件(网络)

*

* @param method

* 请求方法 GET/POST

* @param path

* api的路径

* @param param

* api参数

* @param mediaPath

* 待上传的voide 的path

* @param title

* 视频标题

* @param introduction

* 视频描述

* @param connTime

* 连接时间 默认为5000

* @param readTime

* 读取时间 默认为5000

* @return

* @throws Exception

*/

public static String HttpsUploadVideoMedia(String method, String path, Map param, String mediaPath,

String title, String introduction, int connTime, int readTime) throws Exception {

String result = null;

URL url = new URL(setParmas(param, path, ""));

OutputStream output = null;

BufferedInputStream inputStream = null;

try {

String boundary = "----";

HttpURLConnection conn = getConnection(method, url);

conn.setConnectTimeout(connTime == 0 ? DEFAULT_CONNTIME : connTime);

conn.setReadTimeout(readTime == 0 ? DEFAULT_UPLOAD_READTIME : readTime);

conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

output = conn.getOutputStream();

URL mediaUrl = new URL(mediaPath);

if (mediaUrl != null) {

HttpURLConnection mediaConn = (HttpURLConnection) mediaUrl.openConnection();

mediaConn.setDoOutput(true);

mediaConn.setUseCaches(false);

mediaConn.setRequestMethod(SystemConfig.GET_METHOD);

mediaConn.setConnectTimeout(connTime == 0 ? DEFAULT_CONNTIME : connTime);

mediaConn.setReadTimeout(readTime == 0 ? DEFAULT_UPLOAD_READTIME : readTime);

IOUtils.write(("--" + boundary + "\r\n").getBytes(), output);

IOUtils.write(("Content-Disposition: form-data; name=\"media\"; filename=\"" + getFileName(mediaPath)

+ "\"\r\n").getBytes(), output);

IOUtils.write("Content-Type: video/mp4 \r\n\r\n".getBytes(), output);

inputStream = new BufferedInputStream(mediaConn.getInputStream());

IOUtils.copy(inputStream, output);

// 结尾部分

IOUtils.write(("--" + boundary + "\r\n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write("Content-Disposition: form-data; name=\"description\";\r\n\r\n"

.getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write(("{\"title\":\"" + title + "\",\"introduction\":\"" + introduction + "\"}")

.getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING), output);

IOUtils.write(("\r\n--" + boundary + "--\r\n\r\n").getBytes(SystemConfig.DEFAULT_CHARACTER_ENCODING),

output);

mediaConn.disconnect();

// 获取输入流

result = inputStreamToString(conn.getInputStream());

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (ProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

throw new IOException("read data error");

} finally {

IOUtils.closeQuietly(output);

IOUtils.closeQuietly(inputStream);

}

return result;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

微信公众平台 图片 java_Java微信公众平台之素材管理相关推荐

  1. 微信链接修改图片_微信链接修改图标

    自定义链接是什么?微信链接修改图片_微信链接修改图标 自定义微信分享链接是指将一条网页链接通过微信接口生成一张卡片,并且该卡片的标题,内容和图片都可以自己编辑.如下图效果 ● 未自定义的网页链接 ● ...

  2. 微信分享指引图片 关于微信中分享到朋友圈代码

    转自: https://www.server110.com/jiaocheng/201703/2806284.html 最近在做微信的项目,遇到需要转发到朋友圈功能,有需要的朋友可以参考 首先看页面源 ...

  3. 公众号 采集 java_Java实现公众号数据的抓取

    此文copy于掘金大神,因为比较喜欢,就copy过来了. 前言 昨天在公众号查询我房间还剩多少电时,觉得这些操作好繁琐,好麻烦,于是就萌生了用用JAVA把这些数据爬下来的想法. 爬到数据后,可以用这些 ...

  4. 微信小程序图片分包 || 微信小程序资源分包

    静态资源处理 在分包根目录建一个static包,把资源放进这个static包 pageA--页面1--页面2......--static

  5. 此图片来自微信公众平台未经允许不可引用

    2016年4月6号开始,weixin.sogou.com获取图片应该是加上了Referer验证,上面用的方法失效了,出现下面的情况: 此图片来自微信公众平台 未经允许不可引用 但是我找到一个和读微信网 ...

  6. 此图片来自微信公众平台未经允许不可引用 解决方法

    此图片来自微信公众平台未经允许不可引用 解决方法 参考文章: (1)此图片来自微信公众平台未经允许不可引用 解决方法 (2)https://www.cnblogs.com/lmaster/p/9070 ...

  7. 解决“此图片来自微信公众平台未经允许不可引用”的方法

    解决"此图片来自微信公众平台未经允许不可引用"的方法 参考文章: (1)解决"此图片来自微信公众平台未经允许不可引用"的方法 (2)http://www.cnb ...

  8. 第三方网站不能调用微信公众平台里的图片了 显示此图片来自微信公众号平台未经允许不可引用...

    下午ytkah在自己小博客搜索时看到有几篇文章图片显示不了,再访问一些网站时发现有些图片无法显示出来,显示"此图片来自微信公众号平台未经允许不可引用",如下图所示,这个应该是最近微 ...

  9. 此图片来自微信公众平台 未经允许不可引用

    问题描述; 因为微信给自己的图片都加上了图片防盗链接,只要是直接从公众号文章里复制的文章都会显示如下图所示的情况 解决方案: 方案一: 在head中加上<meta name="refe ...

最新文章

  1. windows 下搭建python虚拟环境
  2. 对VS2008生成智能win32程序简单理解
  3. 让 .Net 更方便的导入导出 Excel
  4. C++算法三:选择排序
  5. python导入数据画折线图_Python读取Excel表格,并同时画折线图和柱状图的方法
  6. SPFA or bellman ford松弛法--单源最短路
  7. Sticky footers 粘住底部布局
  8. 计算机屏幕截图如何保存,怎么在屏幕截图
  9. 开源又好用的录屏软件
  10. ZooKeeper下载安装(Windows版本)
  11. A 跳高【中兴捧月神算师-算法精英挑战赛-比特派第一场】
  12. JN5169 基于 JN-AN-1217 组网点灯
  13. SAI2和PS如何查看当前鼠标位置内容的图层
  14. 平板无线网无法连接网络连接服务器,平板电脑可以连接无线网络但上不了网的解决方法...
  15. 海康威视摄像头断后与8芯网线连接方法
  16. Outlook设置自动存档
  17. ssm 支付宝支付整合
  18. 网站流量有什么作用?可以刷流量吗?
  19. python抽样不同花色纸牌_Python 数据模型 一摞Python风格的纸牌
  20. Iphone5 图片适配

热门文章

  1. C++class类(II)
  2. QT的QWinThumbnailToolBar类的使用
  3. 经典C语言程序100例之八
  4. OpenCv——merge()函数数据合并
  5. python 人脸轮廓提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...
  6. linux java top_linux top命令 监测系统性能
  7. SparkSQL发展历史,DataFrame,SparkSQL的数据源,运行框架,tree和rule,Rule,Context运行过程,hiveContext运行过程,SparkSQL CLI等
  8. Linux for sougou ping yin (http://pinyin.sogou.com/linux/help.php)
  9. 视差图转为深度图_Parallax Mapping视差映射:模拟冰块
  10. 残差网络ResNet笔记