C# 直接复制GIF图片到QQ和微信

2020年2月25日,在@qq_30683961评论后,我重新测试了一下,发现在现在的QQ和微信中,无需这么复杂,只需一句代码即可复制完成

private void CopyGif(string gifPath)
{
    Clipboard.SetText($"<html><body><!--StartFragment--><img src=\"file:///{gifPath}\" /><!--EndFragment--></body></html>",
        TextDataFormat.Html);
}

 需要注意的是,经过我的测试,只能复制本地硬盘上的gif,无法复制网络上的gif,所以复制网络gif时,需要先将其保存为本地的临时文件


以下是原文:

在C#中操作剪贴板复制图片时,如果是普通图片,可直接将其复制为Bitmap,这样到QQ、微信中粘贴的时候就会直接显示

但是,如果是GIF图片,则粘贴后会发现其无法动,因为将其作为Bitmap复制时,只复制了首帧过去,自然动不了

从网上查找解决办法,因为我是准备在UWP中实现这个,所以一直以UWP为关键字搜索,没有找到任何结果,后来以“C# 复制GIF到QQ”为关键字来搜索,总算搜到了有用的内容

大致的解决办法就是,因为剪贴板本身不支持复制GIF图片,所以要将图片转成html的形式去复制,但是其中有一些参数是需要注意的,StartHTML、EndHTML、StartFragment、EndFragment

下面封装了一个方法,可以将本地的gif复制,在QQ、微信中可直接粘贴

public static string HtmlFormatConstruct(string gifPath)
{
	string html = "";
	{
		var htmlPath = Path.GetTempFileName();
		string version = "Version:0.9" + Environment.NewLine;
		string startHtml = "StartHTML:";
		string endHtml = "EndHTML:";
		string startFragment = "StartFragment:";
		string endFragment = "EndFragment:";
		string sourceUrl = "SourceURL:file:///" + htmlPath + Environment.NewLine;
		string htmlContentStart = "<html><body>" + Environment.NewLine;
		string fragmentContent = "<!--StartFragment-->" + "<img src=\"file:///" + gifPath + "\" />" +
								 "<!--EndFragment-->";
		string htmlContentEnd = "</body></html>";
		startHtml += (version.Length
					  + startHtml.Length + 8 + Environment.NewLine.Length
					  + endHtml.Length + 8 + Environment.NewLine.Length
					  + startFragment.Length + 8 + Environment.NewLine.Length
					  + endFragment.Length + 8 + Environment.NewLine.Length
					  + sourceUrl.Length).ToString().PadLeft(8, '0') + Environment.NewLine;
		endHtml += (version.Length
					+ startHtml.Length
					+ endHtml.Length + 8 + Environment.NewLine.Length
					+ startFragment.Length + 8 + Environment.NewLine.Length
					+ endFragment.Length + 8 + Environment.NewLine.Length
					+ sourceUrl.Length
					+ htmlContentStart.Length
					+ fragmentContent.Length
					+ htmlContentEnd.Length).ToString().PadLeft(8, '0') + Environment.NewLine;
		startFragment += (version.Length
						 + startHtml.Length
						 + endHtml.Length
						 + startFragment.Length + 8 + Environment.NewLine.Length
						 + endFragment.Length + 8 + Environment.NewLine.Length
						 + sourceUrl.Length
						 + htmlContentStart.Length).ToString().PadLeft(8, '0') + Environment.NewLine;
		endFragment += (version.Length
						+ startHtml.Length
						+ endHtml.Length
						+ startFragment.Length
						+ endFragment.Length + 8 + Environment.NewLine.Length
						+ sourceUrl.Length
						+ htmlContentStart.Length
						+ fragmentContent.Length).ToString().PadLeft(8, '0') + Environment.NewLine;
		html = version + startHtml + endHtml + startFragment + endFragment + htmlContentStart +
			   fragmentContent + htmlContentEnd;
	}
	return html;
}

将返回值以Html的模式设置到剪贴板即可,按我的理解,QQ和微信会去解析<!--StartFragment-->和<!--EndFragment-->之间的内容并粘贴,如果想要加些水印、尾巴什么的,也可加在这之间

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值