C#获取浏览器中的图片

1、编写资源文件Auto.js文件,嵌入资源文件,获取图像的Base64编码

var __auto__ = (function () {
    var auto = {};


    /*获取图像的Base64编码。注意:在获取图像时可以对图像进行缩放。*/
    auto.getImage = function (id, width, height) {
        var img = document.getElementById(id) || document.getElementsByClassName(id)[0];
        if (!img) return null;


        width = width | img.width;
        height = height | img.height;


        var canvas = document.createElement('canvas');
        canvas.width = width;
        canvas.height = height;


        var ctx = canvas.getContext('2d');
        ctx.drawImage(img, 0, 0, width, height);
        var dataUrl = canvas.toDataURL('image/jpg');
        return dataUrl.replace('data:image/png;base64,', '');
    };


    return auto;
})();

2、注入auto.js脚本

  /// <summary>
        /// 注入auto.js脚本
        /// </summary>
        protected bool InjectAutoJs(string id = "__autoJs__")
        {
            /*1.1 检查页面是否加载完毕*/
            var document = WebBrowser.Document;
            if (document == null) return false;


            var body = document.Body;
            if (body == null) return false;


            /*1.2 检查是否已经注入过*/
            if (document.GetElementById(id) != null) return true;


            /*1.3 检查资源文件*/
            var text = GetResource("Auto.js");
            if (string.IsNullOrEmpty(text)) return false;


            /*2 开始注入*/
            var script = document.CreateElement("script");
            if (script == null) return false;


            script.Id = id;
            script.SetAttribute("type", "text/javascript");
            script.SetAttribute("text", text);


            body.AppendChild(script);


            return true;
        }

3、调用脚本函数

 /// <summary>
        /// 调用auto.js脚本中的函数
        /// </summary>
        public object Call(string name, params object[] args)
        {
            if (!InjectAutoJs()) return null;


            var @params = GetArguments(args);
            var script = $"__auto__.{name}({string.Join(",", @params)})";
            var result = Eval(script);
            return result;
        }

4、Eval函数

        /// <summary>
        /// 使用Eval执行任意脚本
        /// </summary>
        public object Eval(string script)
        {
            var document = WebBrowser.Document;
            if (document == null) return null;


            var result = document.InvokeScript("eval", new object[] { script });
            return result;
        }

5、调用函数

  /// <summary>
        /// 获取浏览器中的图像
        /// <param name="id">元素的id或class</param>
        /// </summary>
        public Image GetImage(string id)
        {
            var base64 = (string)Call("getImage", id);
            if (string.IsNullOrEmpty(base64)) return null;


            var buffer = Base64.Decoded(base64);
            var img = new Bitmap(new MemoryStream(buffer));


            return img;
        }

6、获取固定大小的图片

  /// <summary>
        /// 获取固定大小的图片
        /// </summary>
        /// <param name="img">原有的图片</param>
        /// <param name="width">图片宽</param>
        ///  <param name="heigth">图片高</param>
        /// <returns></returns>
        public Image GetFixedImage(Image img, int width, int heigth)
        {
            var newImage = new Bitmap(width, heigth);
            var g = Graphics.FromImage(newImage);
            g.DrawImage(img, new Rectangle(0, 0, newImage.Width, newImage.Height), new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel);
            return newImage;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值