问题描述
用的方法publicstaticImageBase64ToImage(stringstrbase64){//stringbase64Str="图片的BASE64字符串";byte[]bytes=System.Convert.FromBase64String(strbase64.Replace("data:image/png;base64,",""));using(System.IO.MemoryStreamms=newSystem.IO.MemoryStream(bytes)){returnSystem.Drawing.Image.FromStream(ms);}}前面那个图片是转换后的,后面是转换前的。我就是测试,女的丑了点。。。。不要在意。仔细看头发那里图形断裂了,请问为什么啊
解决方案
本帖最后由 wjfwd2010 于 2016-03-09 17:04:52 编辑
解决方案二:
右边眼睛那也有点问题
解决方案三:
你是按愿格式愿比例导出的么?
解决方案四:
是不是只是因为显示的方式不同,你将两种方式在同一个界面进行对比呢,然后你还需要确认下转换出来的字符串是一致的吗
解决方案五:
publicstaticstringbase64(Bitmaps){returnSystem.Convert.ToBase64String(ImageToBytes(s,System.Drawing.Imaging.ImageFormat.Png));}staticbyte[]ImageToBytes(BitmapImage,System.Drawing.Imaging.ImageFormatimageFormat){if(Image==null){returnnull;}byte[]data=null;using(MemoryStreamms=newMemoryStream()){using(BitmapBitmap=Image){Bitmap.Save(ms,imageFormat);ms.Position=0;data=newbyte[ms.Length];ms.Read(data,0,Convert.ToInt32(ms.Length));ms.Flush();}}returndata;}publicstaticBitmapbase64(strings){returnnewBitmap(byteArrayToImage(System.Convert.FromBase64String(s)));}staticSystem.Drawing.ImagebyteArrayToImage(byte[]byteArrayIn){if(byteArrayIn==null)returnnull;using(System.IO.MemoryStreamms=newSystem.IO.MemoryStream(byteArrayIn)){System.Drawing.ImagereturnImage=System.Drawing.Image.FromStream(ms);ms.Flush();returnreturnImage;}}
OpenFileDialogofd=newOpenFileDialog();ofd.Filter="图片|*.png;*.jpg;*.bmp;*.gif|所有文件|*.*";ofd.ShowDialog();if(string.IsNullOrEmpty(ofd.FileName))return;pictureBox1.Image=Bitmap.FromFile(ofd.FileName);pictureBox2.Image=server.base64(server.base64(newBitmap(Bitmap.FromFile(ofd.FileName))));我这样用的。
解决方案六:
很明显拉伸过了
解决方案七:
左边那张高度119,右边117
解决方案八:
根据楼上说的情况。那就是可能你获得的标签大小与实际图片大小不符合。以至于保存图片的时候拉伸了。
解决方案九:
应该不是拉伸不拉伸的问题试试用方法////摘要://使用指定的编码器和图像编码器参数,将该System.Drawing.Image保存到指定的文件。////参数://filename://字符串,包含要将此System.Drawing.Image保存到的文件的名称。////encoder://此System.Drawing.Image的System.Drawing.Imaging.ImageCodecInfo。////encoderParams://用于该System.Drawing.Image的System.Drawing.Imaging.EncoderParameters。////异常://T:System.ArgumentNullException://filename或encoder为null.////T:System.Runtime.InteropServices.ExternalException://该图像以错误的图像格式保存。-或-该图像被保存到创建该图像的文件。publicvoidSave(stringfilename,ImageCodecInfoencoder,EncoderParametersencoderParams);
参数ImageCodecInfoencoderEncoderParametersencoderParams和原图一致
解决方案十:
引用3楼starfd的回复:
是不是只是因为显示的方式不同,你将两种方式在同一个界面进行对比呢,然后你还需要确认下转换出来的字符串是一致的吗
图肯定不一样了。
解决方案十一:
问题的关键是数据是否正确还原,那样的话,你直接按字节比对看看,,把MemoryStream复制成FileStream,使用notepad++打开十六进制文件看内容,再确定是哪儿出的问题
解决方案十二:
为了避免显示问题造成误解,楼主不妨把两张图的显示位置交换一下,就楼主的代码不存在图片被修改的问题.
解决方案十三:
pictureBox1.Image=Bitmap.FromFile(ofd.FileName);pictureBox2.Image=server.base64(server.base64(newBitmap(Bitmap.FromFile(ofd.FileName))));=====================================传输过程应该没问题,我觉得问题在这儿。两个picturebox大小不一致,导致图像在picturebox中被拉伸。
解决方案十四:
引用12楼tanta的回复:
pictureBox1.Image=Bitmap.FromFile(ofd.FileName);pictureBox2.Image=server.base64(server.base64(newBitmap(Bitmap.FromFile(ofd.FileName))));=====================================传输过程应该没问题,我觉得问题在这儿。两个picturebox大小不一致,导致图像在picturebox中被拉伸。
没有啊一样的啊,你们测试一下看看?
解决方案十五:
我是这样做的,从H5里面拿到的一个BASE64,到服务器端转换成image,然后那个image就有点问题。我是找到的原图看的,不是加载后拉伸不拉伸看的。图像大的话,你不仔细看,就看不出来。但是我用的是119*119的小图就感觉有点小模糊。
解决方案:
也许图片本身不是png,被你转换成png了returnSystem.Convert.ToBase64String(ImageToBytes(s,System.Drawing.Imaging.ImageFormat.Png));改成returnSystem.Convert.ToBase64String(ImageToBytes(s,s.RawFormat));