使用TinyPNG提供的API,对图片进行压缩(C#)
摘要:项目需要,经常需要手动压缩图片,流程太过麻烦,效率低下。System.IO.Directory.Exists){System.IO.Directory.CreateDirectory;}stringurl="https://api.tinify.com/shrink";string[]fileStrs=System.IO.Directory.GetFiles;Console.WriteLine;intnum=0;foreach{System.IO.FileInfoinfo=newSystem.IO.FileInfo;if{stringinput=@"NewImg/"+info.Name;stringoutput=@"CompressedImg/"+info.Name;GetCompressImg;num++;}}Console.WriteLine;Console.ReadKey;}staticpublicvoidGetCompressImg{WebClientclient=newWebClient();stringauth=Convert.ToBase64String;client.Headers.Add;try{client.UploadData;client.DownloadFile;}catch{Console.WriteLine;}}}上面的程序在下载期间会阻塞主线程,效率不够高。使用await/async改写成异步模式。
项目需要,经常需要手动压缩图片,流程太过麻烦,效率低下。所以写了一个小程序,以提高工作效率
using System;
using System.Net;
using System.Text;
using System.IO;
classProgram
{
staticvoidMain()
{
Console.WriteLine("请输入TinyPng.com的API KEY,获取地址:https://tinypng.com/developers");
stringkey =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");
}
stringurl ="https://api.tinify.com/shrink";
string[]fileStrs =System.IO.Directory.GetFiles("NewImg");
Console.WriteLine("共"+fileStrs.Length+"个文件,请等待下载完成...");
intnum =0;
foreach(strings infileStrs)
{
System.IO.FileInfoinfo =newSystem.IO.FileInfo(s);
if(info.Extension==".png"||info.Extension==".jpg")
{
stringinput =@"NewImg/"+info.Name;
stringoutput =@"CompressedImg/"+info.Name;
GetCompressImg(url,key,input,output);
num++;
}
}
Console.WriteLine("文件已下载到CompressedImg文件夹下,共"+num +"个文件");
Console.ReadKey(true);
}
staticpublicvoidGetCompressImg(stringurl,stringkey,stringinput,stringoutput){
WebClientclient =newWebClient();
stringauth =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;
classProgram
{
staticpublicintfileNums =0;
staticpublicintstatus =0;
staticvoidMain()
{
Console.WriteLine("请输入TinyPng.com的API KEY,获取地址:https://tinypng.com/developers");
stringkey =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");
}
stringurl ="https://api.tinify.com/shrink";
string[]fileStrs =System.IO.Directory.GetFiles("NewImg");
fileNums =fileStrs.Length;
foreach(strings infileStrs){
System.IO.FileInfoinfo =newSystem.IO.FileInfo(s);
if(info.Extension==".png"||info.Extension==".jpg"){
stringinput =@"NewImg/"+info.Name;
stringoutput =@"CompressedImg/"+info.Name;
SendReq(url,key,input,output);
}
}
Console.WriteLine("共"+fileNums +"个文件,请等待下载完成...");
Console.ReadKey(true);
}
staticpublicasync voidSendReq(stringurl,stringkey,stringinput,stringoutput){
await GetCompressImg(url,key,input,output);
Console.WriteLine("已完成:"+input);
status++;
if(status ==fileNums){
Console.WriteLine("下载已全部完成,共"+status +"个文件");
}
}
staticpublicasync TaskGetCompressImg(stringurl,stringkey,stringinput,stringoutput){
WebClientclient =newWebClient();
stringauth =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);
}
}
}
免责声明:文章转载自《使用TinyPNG提供的API,对图片进行压缩(C#)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。
上篇iOS 响应链学习vue之windows下安装live-server 超级详细篇下篇
宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=