//图片数据处理
public void SaveData(string MessageJsonData)
{
Thread thread = new Thread(() => GenerateImage(MessageJsonData));
//Thread thread = new Thread(new ThreadStart(GenerateImage));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
Console.WriteLine("线程启动");
}
private void GenerateImage(string MessageJsonData)
{
try
{
URL = "html页面";
//2.解析消息数据
var parm = JsonConvert.DeserializeObject<RequestParmObj>(MessageJsonData);
if (parm != null && parm.tires.Count > 0)
{
//3.生产对应的图片并存储到OSS
string pushid = parm.pushid;
string msg = parm.msg;
//创建OssClient实例。
var client = new OssClient(ossendpoint, accessKeyId, accessKeySecret);
//判断oss文件夹是否存在,不存在则添加报表-中文
string foldername = "image/";
string guid = System.Guid.NewGuid().ToString();
string filePath = guid + ".jpg";
var folderexist = client.DoesObjectExist(bucketName, foldername);
if (!folderexist)
{
//创建oss目录空文件夹
using (MemoryStream memStream = new MemoryStream())
{
client.PutObject(bucketName, foldername, memStream);
}
}
WebBrowser browser = new WebBrowser();
browser.ScrollBarsEnabled = false; //是否启用滚动条
browser.ScriptErrorsSuppressed = true; //是否显示脚本错误
browser.Navigate(URL);
while (browser.ReadyState != WebBrowserReadyState.Complete)
System.Windows.Forms.Application.DoEvents();
//生成默认body宽度和高度的图片(最常用)
int _browserWidth = 800;
int _browserHeight = 1200;
Bitmap _bitmap;
if (browser.Document.Body != null)
{
_browserHeight = browser.Document.Body.OffsetRectangle.Height;
browser.ClientSize = new Size(_browserWidth, _browserHeight);
Rectangle bodyRect = browser.Document.Body.OffsetRectangle;
_bitmap = new Bitmap(_browserWidth, bodyRect.Height);
browser.BringToFront();
browser.DrawToBitmap(_bitmap, bodyRect);
_bitmap = (Bitmap)_bitmap.GetThumbnailImage(_browserWidth, bodyRect.Height, null, IntPtr.Zero);
}
else
{
browser.ClientSize = new Size(_browserWidth, _browserHeight);
_bitmap = new Bitmap(_browserWidth, _browserHeight);
browser.BringToFront();
browser.DrawToBitmap(_bitmap, new Rectangle(0, 0, _browserWidth, _browserHeight));
_bitmap = (Bitmap)_bitmap.GetThumbnailImage(_browserWidth, _browserHeight, null, IntPtr.Zero);
}
MemoryStream ms = new MemoryStream();
_bitmap.Save(ms, ImageFormat.Jpeg);
byte[] byteImage = new Byte[ms.Length];
byteImage = ms.ToArray();
Stream stream = new MemoryStream(byteImage);
//4.生成图片上传阿里云oss目录
PutObjectResult result = client.PutObject(bucketName, foldername + filePath, stream);
browser.Dispose();
}
}
catch (Exception)
{}
}
C#生成图片并上传阿里云oss
于 2024-02-08 15:50:08 首次发布
该代码片段展示了如何在C#中通过线程处理接收到的消息数据,解析后生成图片,然后将图片保存为JPG格式并通过OSS(对象存储服务)上传到阿里云的指定目录。使用了JsonConvert,WebBrowser和Bitmap等库进行网页抓取和图像生成。
摘要由CSDN通过智能技术生成