base64编码的文本转为图片中jpeg保存为白色背景问题

玉墨言 玉墨言 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题出现原因,jpeg不支持透明背景,那么我就想改为白色背景,但是现实是试过很多种方法都不行
源码
        /// <summary>
/// base64编码的文本 转为 图片
/// </summary>
/// <param name="txtFileName"> base64编码</param>
/// <param name="layout">图片格式 支持 jpg|bmp|gif|png</param>
/// <param name="ImgUrl">保存的图片路径</param>
public bool Base64StringToImg(string Imgbase64, string layout, string ImgUrl)
{
//try
//{
//FileStream ifs = new FileStream(Imgbase64, FileMode.Open, FileAccess.Read);
//StreamReader sr = new StreamReader(ifs);
//String inputStr = sr.ReadToEnd();

byte[] arr = Convert.FromBase64String(Imgbase64.Split(',')[1]);
MemoryStream ms = new MemoryStream(arr);
Bitmap bmp = new Bitmap(ms);
if (layout.ToLower() == "jpg")
{
bmp.Save(ImgUrl + ".jpg",ImageFormat.Jpeg);
}
else if (layout.ToLower() == "jpeg")
{
//图片标准压缩格式
bmp.Save(ImgUrl + ".jpeg", ImageFormat.Jpeg);
}
else if (layout.ToLower() == "bmp")
{
//保存的图片格式需支持透明
bmp.MakeTransparent();
bmp.Save(ImgUrl + ".bmp", ImageFormat.Bmp);
}
else if (layout.ToLower() == "gif")
{
//保存的图片格式需支持透明
bmp.MakeTransparent();
bmp.Save(ImgUrl + ".gif", ImageFormat.Gif);
}
else if (layout.ToLower() == "png")
{
//保存的图片格式需支持透明
bmp.MakeTransparent();
//便携式网络图形(无损压缩的位图图形格式)
bmp.Save(ImgUrl + ".png",ImageFormat.Png);
}

ms.Close();
//sr.Close();
//ifs.Close();

if (File.Exists(Imgbase64))
{
File.Delete(Imgbase64);
}
return true;
//MessageBox.Show("转换成功!");
//}
//catch (Exception)
//{
// return false;
//}

}

试过的方法1:
        public Bitmap PTransparentAdjust(Bitmap src)
{
try
{
int w = src.Width;
int h = src.Height;
Bitmap dstBitmap = new Bitmap(src.Width, src.Height, PixelFormat.Format32bppArgb);
BitmapData srcData = src.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly,PixelFormat.Format32bppArgb);
BitmapData dstData = dstBitmap.LockBits(new Rectangle(0, 0, w, h),ImageLockMode.WriteOnly,PixelFormat.Format32bppArgb);
unsafe
{
byte* pIn = (byte*)srcData.Scan0.ToPointer();
byte* pOut = (byte*)dstData.Scan0.ToPointer();
byte* p;
int stride = srcData.Stride;
int r, g, b, a;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
p = pIn;
b = pIn[0];
g = pIn[1];
r = pIn[2];
a = pIn[3];
if (a == 0)
{
pOut[1] = (byte)255;
pOut[2] = (byte)255;
pOut[3] = (byte)255;
pOut[0] = (byte)255;
}
else
{
pOut[1] = (byte)g;
pOut[2] = (byte)r;
pOut[3] = (byte)a;
pOut[0] = (byte)b;
}
pIn += 4;
pOut += 4;
}
pIn += srcData.Stride - w * 4;
pOut += srcData.Stride - w * 4;
}
src.UnlockBits(srcData);
dstBitmap.UnlockBits(dstData);
return dstBitmap;
}
}
catch (Exception e)
{
return null;
}

}


方法二:
                     //        Image img = Image.FromStream(ms, true);
//int width = img.Width;
//int height = img.Height;
//var x = img.HorizontalResolution;
//var y = img.VerticalResolution;
//var tempHeight = height * 300 / y;
//var tempWidth = width * 300 / y;

//Bitmap bmpTemp = new Bitmap((int)tempWidth, (int)tempHeight);
//Graphics g = Graphics.FromImage(bmpTemp);
//g.SmoothingMode = SmoothingMode.AntiAlias;
//g.Clear(Color.Red);
//g.DrawImage(img, new RectangleF(0, 0, tempWidth, tempHeight),
// new RectangleF(0, 0, width, height), GraphicsUnit.Pixel);
//g.Save();

//bmpTemp.Save(ImgUrl + ".jpeg", ImageFormat.Jpeg);
//g.Dispose();
//img.Dispose();
//bmpTemp.Dispose();

结果都不行
...全文

相关推荐

解决canvas转base64/jpeg时透明区域变成黑色背景的方法

最近在工作遇到一个问题,在将png图片转jpeg时,透明区域被填充成黑色,通过网上的介绍找到了解决的方法,现在总结下分享给同样遇到这个问题的朋友们,感兴趣的可以通过本文详细学习下。

weixin_38685793

js 显示base64编码的二进制流网页图片

Data URI scheme。 Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张2*2的白色gif图片。 在上面的Data URI中,data表示取得数据的协定名称,image/gif是数据类型名称,base64 是数据的编码方法,逗号后面就是这个image/gif文件base64编码后的数据。 目前,Data URI scheme支持的类型有: data:,文本数据 data:text/plain,文本数据

紫藤花叶子

jpeg时透明区域变成黑色背景的方法.docx

jpeg时透明区域变成黑色背景的方法.docx

m0_63511380

vue 使用html2canvas将DOM转化为图片的方法

主要介绍了vue 使用html2canvas将DOM转化为图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38624975

canvas如何实现多张图片编辑的图片编辑器

前言 图片编辑器虽然是图片涂鸦工具,但是在当前疫情的大背景下,该工具还可以成为老师在线修改学生提交的家庭作业的工具使用的,它可以极大地减轻了老师的批改作业的工作负担,相信这软件是有市场的。 本次不具体介绍canvas的各种操作画布的api,而且相信大家在网上能搜到大量的关于canvas涂鸦的开源代码,即使是这样,我也相信真正把canvas涂鸦用于公司实际的项目的不多,改装成图片编辑器的会更少,而用于多张图片编辑然后多张统一保存、上传的更是寥寥无几。下面,我将在我曾经写过的一个canvas涂鸦的基础上,将多张图片编辑器的开发和思考过程记录下来。 图片编辑器产品需求 先说需求,由于涉及到实际公司的

weixin_38691970
评论 20
收藏 已收藏
分享
返回顶部
玉墨言
C# 111,128 成员 642,536 内容