小标
2018-11-14
来源 :
阅读 4051
评论 0
摘要:本文主要向大家介绍了C#编程之使用TinyPNG提供的API,对图片进行压缩,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。
本文主要向大家介绍了C#编程之使用TinyPNG提供的API,对图片进行压缩,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。
项目需要,经常需要手动压缩图片,流程太过麻烦,效率低下。所以写了一个小程序,以提高工作效率
using System;
using System.Net;
using System.Text;
using System.IO;
class Program
{
static void Main()
{
Console.WriteLine("请输入TinyPng.com的API KEY,获取地址:https://tinypng.com/developers");
string key = Console.ReadLine();
if (!System.IO.Directory.Exists("NewImg"))
{
System.IO.Directory.CreateDirectory("NewImg");
Console.WriteLine("已创建NewImg目录,请把需要处理的图片放到该目录下");
Console.ReadKey(true);
return;
}
if (!System.IO.Directory.Exists("CompressedImg")){
System.IO.Directory.CreateDirectory("CompressedImg");
}
string url = "https://api.tinify.com/shrink";
string[] fileStrs = System.IO.Directory.GetFiles("NewImg");
Console.WriteLine("共" + fileStrs.Length + "个文件,请等待下载完成...");
int num = 0;
foreach (string s in fileStrs)
{
System.IO.FileInfo info = new System.IO.FileInfo(s);
if (info.Extension == ".png" || info.Extension == ".jpg")
{
string input = @"NewImg/" + info.Name;
string output = @"CompressedImg/" + info.Name;
GetCompressImg(url, key, input, output);
num++;
}
}
Console.WriteLine("文件已下载到CompressedImg文件夹下,共" + num + "个文件");
Console.ReadKey(true);
}
static public void GetCompressImg(string url,string key,string input,string output){
WebClient client = new WebClient();
string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes("api:" + key));
client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + auth);
try
{
client.UploadData(url, File.ReadAllBytes(input));
client.DownloadFile(client.ResponseHeaders["Location"], output);
}
catch (WebException)
{
Console.WriteLine("网络请求失败:" + input);
}
}
}
上面的程序在下载期间会阻塞主线程,效率不够高。
使用await/async改写成异步模式。
using System;
using System.Net;
using System.Text;
using System.IO;
using System.Threading.Tasks;
class Program
{
static public int fileNums = 0;
static public int status = 0;
static void Main()
{
Console.WriteLine("请输入TinyPng.com的API KEY,获取地址:https://tinypng.com/developers");
string key = Console.ReadLine();
if (!System.IO.Directory.Exists("NewImg"))
{
System.IO.Directory.CreateDirectory("NewImg");
Console.WriteLine("已创建NewImg目录,请把需要处理的图片放到该目录下");
Console.ReadKey(true);
return;
}
if (!System.IO.Directory.Exists("CompressedImg")){
System.IO.Directory.CreateDirectory("CompressedImg");
}
string url = "https://api.tinify.com/shrink";
string[] fileStrs = System.IO.Directory.GetFiles("NewImg");
fileNums = fileStrs.Length;
foreach (string s in fileStrs) {
System.IO.FileInfo info = new System.IO.FileInfo(s);
if (info.Extension == ".png" || info.Extension == ".jpg") {
string input = @"NewImg/" + info.Name;
string output = @"CompressedImg/" + info.Name;
SendReq(url, key, input, output);
}
}
Console.WriteLine("共" + fileNums + "个文件,请等待下载完成...");
Console.ReadKey(true);
}
static public async void SendReq(string url, string key, string input, string output) {
await GetCompressImg(url, key, input, output);
Console.WriteLine("已完成:" + input);
status++;
if (status == fileNums) {
Console.WriteLine("下载已全部完成,共" + status + "个文件");
}
}
static public async Task GetCompressImg(string url,string key,string input,string output){
WebClient client = new WebClient();
string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes("api:" + key));
client.Headers.Add(HttpRequestHeader.Authorization, "Basic " + auth);
try {
await client.UploadDataTaskAsync(url, File.ReadAllBytes(input));
await client.DownloadFileTaskAsync(client.ResponseHeaders["Location"], output);
} catch (WebException) {
Console.WriteLine("网络请求失败:" + input);
}
}
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!
喜欢 | 1
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号