今天在公司实习遇到问题,要求编写接口传图片到dynamics crm 365 系统,实体字段entityimage类型为图片,实际上就是byte数组。
//将图片的路径转为Image类型
public System.Drawing.Image LoadImage(string path) {
//创建一个bitmap类型的bmp变量来读取文件。
Bitmap bmp = new Bitmap(path);
//新建第二个bitmap类型的bmp2变量,我这里是根据我的程序需要设置的。
Bitmap bmp2 = new Bitmap(bmp.Width, bmp.Height, PixelFormat.Format16bppRgb555);
//将第一个bmp拷贝到bmp2中
Graphics draw = Graphics.FromImage(bmp2);
draw.DrawImage(bmp, 0, 0);
draw.Dispose();
bmp.Dispose();//释放bmp文件资源
return (System.Drawing.Image)bmp2;
}
/// <summary>
/// 将图片转为二进制
/// </summary>
/// <param name="img">图片</param>
/// <returns></returns>
public byte[] GetByteImage(System.Drawing.Image img) {
byte[] bt = null;
if (!img.Equals(null)) {
using (MemoryStream mostream = new MemoryStream()) {
Bitmap bmp = new Bitmap(img);
bmp.Save(mostream, System.Drawing.Imaging.ImageFormat.Jpeg);//将图像以指定的格式存入缓存内存流
bt = new byte[mostream.Length];
mostream.Position = 0;//设置留的初始位置
mostream.Read(bt, 0, Convert.ToInt32(bt.Length));
}
}
return bt;
}
转为base64主程序
namespace ConsoleApp1 {
class Program {
static void Main(string[] args) {
Test test = new Test();
string path = @"F:\123.jpg";
Image image = test.LoadImage(path);
byte[] photo = test.GetByteImage(image);
string pic = Convert.ToBase64String(photo);
Console.WriteLine(pic);
}
}
}
这样控制台会输出图片的base64类型,这样就可以用postman通过json传值了,这里的member_photo是byte[]类型
而代码中传的值将base64以byte[]储存了