小Q的博客

  • 首页
  • net编程
    • 产品和框架
    • 开发实例
    • 经验技巧
    • 开源组件
  • wp独立站
  • 自媒体
  • 日记本
  • 工具箱
每个程序员,都应该有一个自己的博客站
  1. 首页
  2. net编程
  3. 经验技巧
  4. 正文

c#中图片编辑和图片识别,用到了这些技术

2022年12月17日 1636点热度 0人点赞 0条评论

今天这篇博客是关于图片操作的,包括2部分,分别是图片编辑和图片识别。不过多深入,分享下用到了哪些技术?废话不多说,直接进入正题

图片识别+图片编辑

Table of Contents

Toggle
  • 图片识别
  • 图片编辑
    • 格式转换
    • 合并图片
    • 裁剪图片
    • 文字转图片
    • Base64转图片
    • 图片转Base64
    • 去水印
    • 加文字水印
    • 加图片水印
    • 图片转视频
    • 屏幕截图

图片识别

这里用到的技术是百度AI平台。它提供WebAPI接口供别人调用,还可以通过SDK调用。代码简单,贴个调用示例

Encoding encoding = Encoding.Default;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlPath);
request.Method = "post";
request.KeepAlive = true;

String urlParam = "image=" + HttpUtility.UrlEncode(imageBase64);
if (dicParam != null)
{
    string urlParamOth = UrlHelper.ComboUrlParam(dicParam);
    urlParam += "&" + urlParamOth;
}

byte[] buffer = encoding.GetBytes(urlParam);
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

string result = reader.ReadToEnd();
return result;

 

图片编辑

格式转换

普通的图片格式,如jpg、jpeg、png、bmp,都可以用System.Drawing.Image对象即可,如果是Svg格式、WebP格式,可以参考这篇博客中提到的组件。

合并图片

就是将图片拼接,最多支持9张。布局包括1x2、1x2、1x3。。。最多支持3x3的九宫格。

合并图片

裁剪图片

就是截取部分图片,根据坐标和尺寸。

裁剪图片

文字转图片

可以设置图片的背景色,文字大小、颜色和字体

文字转图片

Base64转图片

图片转Base64

将图片转为Base64字符串,可以用于WebAPI交互,而且支持批量操作

/// <summary>
/// Base64与图片互转
/// 参考地址:http://www.cnblogs.com/freeliver54/p/3430956.html
/// </summary>
/// <param name="fileFullName"></param>
/// <returns></returns>
public static string SetImageToBase64(string fileFullName)
{
    string base64 = string.Empty;

    Bitmap bmp = new Bitmap(fileFullName);
    MemoryStream ms = new MemoryStream();
    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] bytes = new byte[ms.Length];
    ms.Position = 0;
    ms.Read(bytes, 0, (int)ms.Length);
    ms.Close();

    base64 = Convert.ToBase64String(bytes);

    return base64;
}
/// <summary>
/// 图片与Base64互转
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
public static string SetImageToBase64(Bitmap bmp)
{
    MemoryStream ms = new MemoryStream();
    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] bytes = new byte[ms.Length];
    ms.Position = 0;
    ms.Read(bytes, 0, (int)ms.Length);
    ms.Close();

    string base64 = Convert.ToBase64String(bytes);
    return base64;
}
/// <summary>
/// Base64与图片互转
/// 参考地址:http://www.cnblogs.com/freeliver54/p/3430956.html
/// </summary>
/// <param name="base64"></param>
/// <returns></returns>
public static Image GetImageByBase64(string base64)
{
    Image image = null;

    byte[] imageBytes = Convert.FromBase64String(base64);

    //读入MemoryStream对象
    MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
    memoryStream.Write(imageBytes, 0, imageBytes.Length);

    //转成图片
    image = Image.FromStream(memoryStream);

    return image;
}

 

去水印

即图片马赛克处理,隐藏不需要显示的地方

加文字水印

加图片水印

文字和图片的水印,都支持

图片转视频

这里用到了ffmpeg组件,大名鼎鼎。参数也简单,如下所示。里面有N多参数

listP.Add("-framerate");
listP.Add(frameRate.ToString());
listP.Add("-f");
listP.Add("image2");                           
listP.Add("-i");
listP.Add(@"""" + imageFolder + @"\%d.jpg" + @"""");

if (!string.IsNullOrEmpty(mediaFile))
{
    listP.Add("-i");
    listP.Add(@"""" + mediaFile + @"""");
}

屏幕截图

就是仿QQ的屏幕截图功能

 

部分源代码下载

 

相关阅读

c#中如何实现office、文本、html、图片和pdf互转?

c#中实现Word、Excel、Pdf预览及音频和视频播放

标签: 合并图片 图片编辑 图片识别 格式转换 水印图片 裁剪图片
最后更新:2022年12月17日

小Q

80后中年不油腻大叔,喜欢编写代码、打羽毛球、做木制玩具。目前定居浙江杭州

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2022 小Q的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备2022019157号-2