图片与字节数组相互转换的方法
C#byte数组与Image的相互转换
C#byte数组与Image的相互转换功能需求:1、把⼀张图⽚(png bmp jpeg bmp gif)转换为byte数组存放到数据库。
2、把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显⽰。
3、从图⽚byte数组得到对应图⽚的格式,⽣成⼀张图⽚保存到磁盘上。
这⾥的Image是System.Drawing.Image。
//Get an image from fileImage image = Image.FromFile("D:\\test.jpg");Bitmap bitmap = new Bitmap("D:\\test.jpg");以下三个函数分别实现了上述三个需求:using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Imaging;using System.IO;using System.Linq;using System.Text;namespace NetUtilityLib{public static class ImageHelper{///<summary>/// Convert Image to Byte[]///</summary>///<param name="image"></param>///<returns></returns>public static byte[] ImageToBytes(Image image){ImageFormat format = image.RawFormat;using (MemoryStream ms = new MemoryStream()){if (format.Equals(ImageFormat.Jpeg)){image.Save(ms, ImageFormat.Jpeg);}else if (format.Equals(ImageFormat.Png)){image.Save(ms, ImageFormat.Png);}else if (format.Equals(ImageFormat.Bmp)){image.Save(ms, ImageFormat.Bmp);}else if (format.Equals(ImageFormat.Gif)){image.Save(ms, ImageFormat.Gif);}else if (format.Equals(ImageFormat.Icon)){image.Save(ms, ImageFormat.Icon);}byte[] buffer = new byte[ms.Length];//Image.Save()会改变MemoryStream的Position,需要重新Seek到Beginms.Seek(0, SeekOrigin.Begin);ms.Read(buffer, 0, buffer.Length);return buffer;}}///<summary>/// Convert Byte[] to Image///</summary>///<param name="buffer"></param>///<returns></returns>public static Image BytesToImage(byte[] buffer){MemoryStream ms = new MemoryStream(buffer);Image image = System.Drawing.Image.FromStream(ms);return image;}///<summary>/// Convert Byte[] to a picture and Store it in file///</summary>///<param name="fileName"></param>///<param name="buffer"></param>///<returns></returns>public static string CreateImageFromBytes(string fileName, byte[] buffer) {string file = fileName;Image image = BytesToImage(buffer);ImageFormat format = image.RawFormat;if (format.Equals(ImageFormat.Jpeg)){file += ".jpeg";}else if (format.Equals(ImageFormat.Png)){file += ".png";}else if (format.Equals(ImageFormat.Bmp)){file += ".bmp";}else if (format.Equals(ImageFormat.Gif)){file += ".gif";}else if (format.Equals(ImageFormat.Icon)){file += ".icon";}System.IO.FileInfo info = new System.IO.FileInfo(file);System.IO.Directory.CreateDirectory(info.Directory.FullName);File.WriteAllBytes(file, buffer);return file;}}}。
java bufferedimage转bytes方法
java bufferedimage转bytes方法Java BufferedImage转Bytes方法介绍在Java编程中,我们常常需要将BufferedImage对象转化为字节数组(byte array),以便进行进一步的处理或传输。
这篇文章将详细介绍一些常用的方法,帮助你实现这一目标。
方法一:使用ByteArrayOutputStream该方法通过创建一个ByteArrayOutputStream对象,并使用ImageIO将BufferedImage写入流中,最后将流转化为字节数组。
ByteArrayOutputStream baos = new ByteArrayOutputStr eam();(image, "jpg", baos);byte[] bytes = ();方法二:使用MemoryCacheImageOutputStream这种方法需要使用类,先将BufferedImage对象写入MemoryCacheImageOutputStream对象中,然后从中获取字节数组。
try (MemoryCacheImageOutputStream os = new MemoryCa cheImageOutputStream(baos)) {(image, "png", os);();byte[] bytes = ();}方法三:使用RasterRaster类提供了获取BufferedImage数据的一种方法,我们可以通过getDataBuffer()获取DataBuffer对象,进而获取字节数组。
WritableRaster raster = ();DataBufferByte buffer = (DataBufferByte) ();byte[] bytes = ();方法四:使用PixelGrabberPixelGrabber类可以用来抓取图像中的像素信息,我们可以利用该类获取图像的字节数组。
图片二进制互相转换C#
Response.ContentType = "application/x-shockwave-flash";
case "xls":
Response.ContentType = "application/vnd.ms-excel";
case "gif":
Response.ContentType = "image/gif";
//img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
//下面几行代码将图片显示在IMAGE中
byte[] photo = getBytes(strpath);
二进制文件转换部分:
string strpath;
protected void Page_Load(object sender, EventArgs e)
{
strpath = HttpContext.Current.Request.PhysicalApplicationPath + "1.bmp";
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(imgData);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
case "Jpg":
Response.ContentType = "image/jpeg";
图片转二进制(互转)
图⽚转⼆进制(互转)Note:图⽚转⼆进制数据只需转化为bate数组⼆进制数据即可,例如要求httpclient发送图⽚⼆进制数据即是把⽣成的bate数组数据发送过去。
如果对⽅明确提出是字符串格式编码,再进⼀步转化就好了使⽤Base64转换图⽚利⽤Base64实现⼆进制和图⽚之间的转换,具体代码如下:import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import org.apache.tomcat.util.codec.binary.Base64;public class ImageBinary {public static void main(String[] args) {String fileName = "D://code//test.jpg";System.out.println(getImageBinary(fileName));saveImage(getImageBinary(fileName));}/** 图⽚转换为⼆进制** @param fileName* 本地图⽚路径* @return* 图⽚⼆进制流* */public static String getImageBinary(String fileName) {File f = new File(fileName);BufferedImage bi;try {bi = ImageIO.read(f);ByteArrayOutputStream baos = new ByteArrayOutputStream();ImageIO.write(bi, "jpg", baos);byte[] bytes = baos.toByteArray();return Base64.encodeBase64String(bytes);//return encoder.encodeBuffer(bytes).trim();} catch (IOException e) {e.printStackTrace();}return null;}/*** 将⼆进制转换为图⽚** @param base64String* 图⽚⼆进制流**/public static void saveImage(String base64String) {try {byte[] bytes1 = Base64.decodeBase64(base64String);ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);BufferedImage bi1 = ImageIO.read(bais);File w2 = new File("D://code//22.jpg");// 可以是jpg,png,gif格式ImageIO.write(bi1, "jpg", w2);// 不管输出什么格式图⽚,此处不需改动} catch (IOException e) {e.printStackTrace();}}}⽹络地址url与本地图⽚获取图⽚字节流若通过url访问图⽚并转换为⼆进制流,就不能按照上述⽅法。
C#图片和byte[]的互相转换
C#图⽚和byte[]的互相转换图⽚的“读”操作①参数是图⽚路径:返回Byte[]类型://参数是图⽚的路径public byte[] GetPictureData(string imagePath){FileStream fs = new FileStream(imagePath, FileMode.Open);byte[] byteData = new byte[fs.Length];fs.Read(byteData, 0, byteData.Length);fs.Close();return byteData;}②参数类型是Image对象,返回Byte[]类型//将Image转换成流数据,并保存为byte[]public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto){MemoryStream mstream = new MemoryStream();imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);byte[] byData = new Byte[mstream.Length];mstream.Position = 0;mstream.Read(byData, 0, byData.Length); mstream.Close();return byData;}图⽚的“写”操作①参数是Byte[]类型,返回值是Image对象public System.Drawing.Image ReturnPhoto(byte[] streamByte){System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);System.Drawing.Image img = System.Drawing.Image.FromStream(ms);return img;}②参数是Byte[] 类型,没有返回值(输出图⽚)public void WritePhoto(byte[] streamByte){// Response.ContentType 的默认值为默认值为“text/html”Response.ContentType = "image/GIF";//图⽚输出的类型有: image/GIF image/JPEGResponse.BinaryWrite(streamByte);}。
c# 图片与byte[]之间以及byte[]与string之间的转换
return ms.ToArray();
}
public static string ByteArrayToString(byte[] bytes)
{
return Convert.ToBase64String(bytes);
winform直接显示二进制数据中的图片
//读取DataSet中以二进制(Image)形式保存的图片
byte[] byteImage = (byte[])dataSet11.tBGPicture.Rows[2]["PicContent"];
//转成MemoryStream类型
10 ms2.Seek(0, System.IO.SeekOrigin.Begin);
11 System.Drawing.Image image2 = System.Drawing.Image.FromStream(ms2);
12 image2.Save("D:\\2.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
Image image = Image.FromStream(ms);
return image;
}
public static byte[] ImageToByteArray(Image image)
{
MemoryStream ms = new MemoryStream();
3 image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
4 ms.Flush();
VC打开图片保存为数组,然后数组显示为图片,直接操作像素值
显示.bmp文件:操作xxDoc.h, xxDoc.cpp, xxView.cpp即可完成1、新建单文档文件BmpView2、在BmpViewDoc.h中添加// Attributespublic:BITMAPINFOHEADER bi; //信息头RGBQUAD* quad; //调色板BYTE* lpBuf; //图像数据BITMAPINFO* pbi;int flag; //标志表示是否打开了bmp文件,并在构造函数中初始化为0,Sorinleeint numQuad; //调色板数目BYTE* lpshowbuf; //用于显示的图像数据int zoomfactor; //缩放比率BYTE** image; //原文是把它作为局部变量,在PrepareShowdata()函数中定义Sorinlee3、在BmpViewDoc.cpp的OnFileOpen() 中添加// TODO: Add your command handler code hereflag=1;//设定标志SorinleeLPCTSTR lpszFilter="BMP Files(*.bmp)|*.bmp|任何文件|*.*||";CFileDialogdlg1(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL); CString filename;CFile file;BITMAPFILEHEADER bf;//打开文件对话框if(dlg1.DoModal()==IDOK){filename=dlg1.GetPathName();if(file.Open(filename,CFile::modeRead|CFile::shareDenyNone,NULL)==0){//读取文件失败AfxMessageBox("无法打开文件!",MB_OK,0);return;}//读取文件头file.Read(&bf,sizeof(bf));//判断是否是BMP文件if(bf.bfType!=0x4d42)//'BM'{AfxMessageBox("非BMP文件!",MB_OK,0);return;}//判断文件是否损坏if(file.GetLength()!=bf.bfSize){AfxMessageBox("文件已损坏,请检查!",MB_OK,0);return;}//读文件信息头file.Read(&bi,sizeof(bi));//计算调色板数目numQuad=0;if(bi.biBitCount<24){numQuad=1<<bi.biBitCount;}//为图像信息pbi申请空间pbi=(BITMAPINFO*)HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(R GBQUAD));memcpy(pbi,&bi,sizeof(bi));quad=(RGBQUAD*)((BYTE*)pbi+sizeof(BITMAPINFOHEADER));//读取调色板if(numQuad!=0){file.Read(quad,sizeof(RGBQUAD)*numQuad);}//为图像数据申请空间bi.biSizeImage=bf.bfSize-bf.bfOffBits;lpBuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,bi.biSizeImage);//读取图像数据file.Read(lpBuf,bi.biSizeImage);//图像读取完毕,关闭文件,设置标志file.Close();flag=1;zoomfactor=1;lpshowbuf=NULL;PrepareShowdata();UpdateAllViews(NULL,0,NULL);}4、在BmpViewDoc 中添加成员函数bool CBmpViewDoc::PrepareShowdata()//BYTE** image;//原文是在这里把这个定义为局部变量SorinleeBYTE** originimage;int i,j;int linewidth;if(lpshowbuf!=NULL)HeapFree(GetProcessHeap(),0,lpshowbuf);if(zoomfactor>=1){//放大pbi->bmiHeader.biHeight=bi.biHeight*zoomfactor;pbi->bmiHeader.biWidth=bi.biWidth*zoomfactor;//每行四字节补齐,计算每行字节数:linewidth=(pbi->bmiHeader.biWidth*pbi->bmiHeader.biBitCount+31)/32*4;//计算显示图像所需内存大小pbi->bmiHeader.biSizeImage=linewidth*pbi->bmiHeader.biHeight;//申请内存lpshowbuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,pbi->bmiHeader.biSizeImage); //生成对lpshowbuf的二维数组索引:image=new BYTE*[pbi->bmiHeader.biHeight];for(i=0;i<pbi->bmiHeader.biHeight;i++)image[i]=lpshowbuf+i*linewidth;originimage=new BYTE*[bi.biHeight];for(i=0;i<bi.biHeight;i++)originimage[i]=lpBuf+i*bi.biSizeImage/bi.biHeight;//赋值if(bi.biBitCount<24){for(i=0;i<pbi->bmiHeader.biHeight;i++)for(j=0;j<linewidth;j++)image[i][j]=originimage[i/zoomfactor][j/zoomfactor];}else if(bi.biBitCount==24){//24位真彩色for(i=0;i<pbi->bmiHeader.biHeight;i++)for(j=0;j<pbi->bmiHeader.biWidth;j++){image[i][j*3]=originimage[i/zoomfactor][(j/zoomfactor)*3];image[i][j*3+1]=originimage[i/zoomfactor][(j/zoomfactor)*3+1];image[i][j*3+2]=originimage[i/zoomfactor][(j/zoomfactor)*3+2];}}else{//32位色for(i=0;i<pbi->bmiHeader.biHeight;i++)for(j=0;j<pbi->bmiHeader.biWidth;j++){image[i][j*4]=originimage[i/zoomfactor][(j/zoomfactor)*4];image[i][j*4+1]=originimage[i/zoomfactor][(j/zoomfactor)*4+1];image[i][j*4+2]=originimage[i/zoomfactor][(j/zoomfactor)*4+2];image[i][j*4+3]=originimage[i/zoomfactor][(j/zoomfactor)*4+3];}}}else{//缩小pbi->bmiHeader.biHeight=bi.biHeight/(-zoomfactor);pbi->bmiHeader.biWidth=bi.biWidth/(-zoomfactor);//每行四字节补齐,计算每行字节数:linewidth=(pbi->bmiHeader.biWidth*pbi->bmiHeader.biBitCount+31)/32*4;//计算显示图像所需内存大小pbi->bmiHeader.biSizeImage=linewidth*pbi->bmiHeader.biHeight;//申请内存lpshowbuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,pbi->bmiHeader.biSizeImage); //生成对lpshowbuf的二维数组索引:image=new BYTE*[pbi->bmiHeader.biHeight];for(i=0;i<pbi->bmiHeader.biHeight;i++)image[i]=lpshowbuf+i*linewidth;originimage=new BYTE*[bi.biHeight];for(i=0;i<bi.biHeight;i++)originimage[i]=lpBuf+i*bi.biSizeImage/bi.biHeight;//赋值if(bi.biBitCount<24){for(i=0;i<pbi->bmiHeader.biHeight;i++)for(j=0;j<linewidth;j++)image[i][j]=originimage[i*(-zoomfactor)][j*(-zoomfactor)];}else if(bi.biBitCount==24){//24位真彩色for(i=0;i<pbi->bmiHeader.biHeight;i++)for(j=0;j<pbi->bmiHeader.biWidth;j++){image[i][j*3]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3];image[i][j*3+1]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3+1];image[i][j*3+2]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3+2];}}else{//32位色for(i=0;i<pbi->bmiHeader.biHeight;i++)for(j=0;j<pbi->bmiHeader.biWidth;j++){image[i][j*4]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4];image[i][j*4+1]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+1];image[i][j*4+2]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+2];image[i][j*4+3]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+3];}}}Invalidate();//使窗口重绘Sorinlee,不明白为什么,不加这句就不显示图像了delete []image;delete []originimage;return TRUE;5、在BmpViewView中添加WM_PAINT消息,在消息响应函数中添加CPaintDC dc(this); // device context for painting// TODO: Add your message handler code here//得到文档指针CBmpViewDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);//是否已打开某个BMP文件,为了直接操作数组的每一个像素,我屏蔽掉了if语句里面的内容Sorinlee if(pDoc->flag==1){//指定是显示的颜色SetDIBitsToDevice(dc.m_hDC,0,0,pDoc->pbi->bmiHeader.biWidth,pDoc->pbi->bmiHeader.biHeight,0,0,0,pDoc->pbi->bmiHeader.biHeight,pDoc->lpshowbuf,pDoc->pbi,DIB_RGB_COLORS);}// Do not call CView::OnPaint() for painting messagesif(flag){//for(int i=0;i<pbi->bmiHeader.biHeight;i++)//图像倒立for(int i= pbi->bmiHeader.biHeight-1;i>0;i--)//图像正显for(int j=0;j<pbi->bmiHeader.biWidth;j++)//dc.SetPixel(i,j,RGB(image[i][j*3],image[i][j*3+1],image[i][j*3+2]));dc.SetPixel(i,j,RGB(image[i][j*3+2],image[i][j*3+1],image[i][j*3]));}把图像显示为点阵形式Sorinlee//创建画笔,画点阵COLORREF c olor;CPoint point(40,40);if(flag){//for(i=0;i<pbi->bmiHeader.biHeight;i++)//图像倒立for(i= pbi->bmiHeader.biHeight-1;i>0;i--)//图像正显{for(j=0;j<pbi->bmiHeader.biWidth;j++){CPen pen(PS_SOLID,5,color);dc.SelectObject(&pen);CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));dc.SelectObject(pBrush);//dc.SetPixel(i,j,RGB(image[i][j*3],image[i][j*3+1],image[i][j*3+2]));color=RGB(image[i][j*3],image[i][j*3+1],image[i][j*3+2]);dc.Ellipse(point.x-2,point.y-2,point.x+2,point.y+2);point.x+=12;}point.y+=12;point.x=40;}} */。
java文件File与byte[]数组相互转换的两种方式
java⽂件File与byte[]数组相互转换的两种⽅式1.⽂件转byte[]⽅式⼀:⽂件输⼊流File file = new File("C:\\Users\\Marydon\\Desktop\\个⼈信⽤报告.pdf");try {FileInputStream fis = new FileInputStream(file);// 强转成int类型⼤⼩的数组byte[] fileBytes = new byte[(int) file.length()];// 将pdf内容放到数组当中fis.read(fileBytes);// 关闭⽂件流fis.close();System.out.println(Arrays.toString(fileBytes));} catch (IOException e) {e.printStackTrace();} 在这⾥会触发⼀个思考题: 将⽂件的长度类型long强制转换成int,真的可以吗? 起初,我觉得这样不妥,原因在于:假设当⽂件的长度>Integer类型的最⼤值时,那就这样肯定就不⾏了,byte[]将不是⼀个完整的⽂件数组集合,怎么办? 我⾸先想到的是: 我们在进⾏⽂件流的读写操作时,通常使⽤的是这种⽅式 写到这⾥,我才明⽩,这种循环读取的⽅式是因为有地⽅可以接受读取到的字节,我们这⾥呢?本来就是要⽤数组接收的,现在接收不下,没有办法,要想实现的话,也就只能将⽂件拆分成多个数字集合,这样⼀来,和我的初衷背道⽽驰,我就是想要将它们融合到⼀个数组,显然,这种⽅式是⾏不通的。
接下来,我就查了在Java中,数组的最⼤限制相关信息: 数组的最⼤限制,理论值是: 相当于2G的⼤⼩,对应应⽤内存的话是4G(源⾃⽹络,不知其真假性,如果有好⼼⼈进⾏测试⼀下,欢迎留⾔) 当我创建⼀个最⼤的数组时,结果如下: 数组所需内存超过了Java虚拟机的内存,GAME OVER。
python图像数据互转(numpy,bytes,base64,file)
python图像数据互转( numpy,bytes,base64,file)
import cv2 import numpy as np import base64 from tkinter import * from io import BytesIO
# 数组转base64 def data = cv2.imencode('.jpg', image_np)[1] image_bytes = data.tobytes() image_base4 = base64.b64encode(image_bytes).decode('utf8') return image_base4
with open(path_file,'rb') as f: image_bytes = f.read() image_base64 = base64.b64encode(image_bytes).decode('utf8') return image_base64
# base64 转 bytes def base64_to_bytes(image_base64):
# base64 保存 def base64_to_file(image_base64):
filename = '你的文件名_base64.jpg' image_bytes = base64.b64decode(image_base64) with open(filename, 'wb') as f:
filename = '你的文件名_bytes.jpg' with open(filename,'wb') as f:
qimage constbits 转换 数组
qimage constbits 转换数组下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!图像处理中的 qimage constbits 转换数组导言在图像处理领域,QImage 是一个常用的类,用于在Qt 框架中加载、显示和编辑图像。
byte数组与byte数组转化
byte数组与byte数组转化摘要:一、引言二、byte数组与byte数组转化的概念1.byte数组2.byte数组转化三、byte数组与byte数组转化的方法1.字节数组转字符串2.字符串转字节数组四、byte数组与byte数组转化的应用场景1.网络传输2.文件存储五、总结正文:一、引言在计算机编程中,byte数组和byte数组转化是经常遇到的操作。
了解byte数组与byte数组转化的概念、方法和应用场景,对于编程工作非常有帮助。
二、byte数组与byte数组转化的概念1.byte数组byte数组,又称字节数组,是一种数据类型,用于存储一系列字节。
在Java、C#等编程语言中,它通常用于存储和处理二进制数据。
2.byte数组转化byte数组转化是指将byte数组与其他数据类型(如字符串、整数等)之间进行转换。
三、byte数组与byte数组转化的方法1.字节数组转字符串在Java中,可以使用`new String(byte[], charset)`方法将byte数组转换为字符串。
其中,`charset`表示字符集,如UTF-8、GBK等。
2.字符串转字节数组在Java中,可以使用`String.getBytes(charset)`方法将字符串转换为byte数组。
其中,`charset`表示字符集,如UTF-8、GBK等。
四、byte数组与byte数组转化的应用场景1.网络传输在网络传输过程中,数据通常以byte数组的形式进行传输。
因此,在处理网络数据时,需要将字符串、整数等数据类型转换为byte数组,以便进行传输。
2.文件存储在文件存储过程中,数据也需要以byte数组的形式进行存储。
例如,在将文本文件存储到磁盘时,需要将字符串转换为byte数组,然后将byte数组写入文件。
五、总结byte数组与byte数组转化是计算机编程中常见的操作。
byte数组与byte数组转化
byte数组与byte数组转化byte数组与byte数组之间的转化是在编程中经常遇到的需求。
有时候,我们需要将一个byte数组转化为另一个byte数组来满足我们的需要。
这些需要包括但不限于:网络传输数据、数据加密、数据压缩等等。
在本文中,我将讨论如何在Java中将byte数组转化为另一个byte数组。
在Java中,byte数组是存储二进制数据的一种数据类型。
它由固定长度的字节组成,每个字节都保存了一个8位的二进制值。
因此,byte数组可以表示任何二进制数据,如图像、音频、视频等。
要将一个byte数组转化为另一个byte数组,我们可以使用Java提供的一些方法和技巧。
下面是一些可供参考的方法和思路:1. 使用System.arraycopy()方法:这是Java中最常用的将一个byte数组复制到另一个byte数组的方法之一。
该方法可以在两个数组之间执行快速的内存复制,以达到将一个数组复制到另一个数组的目的。
以下是使用System.arraycopy()方法的示例代码:```javabyte[] sourceArray = {1, 2, 3, 4, 5};byte[] destinationArray = new byte[sourceArray.length];System.arraycopy(sourceArray, 0, destinationArray, 0,sourceArray.length);```在上面的代码中,我们首先创建了一个源数组sourceArray 和一个目标数组destinationArray。
然后,我们使用System.arraycopy()方法将源数组的内容复制到目标数组中。
2. 使用ByteArrayOutputStream和ByteArrayInputStream:Java中的ByteArrayOutputStream和ByteArrayInputStream类提供了用于在内存中生成和处理字节数组的功能。
图片转化为二进制数据,并显示出来
图片转化为二进制数据,并显示出来图片转化为二进制数据,并显示出来2009-12-04 17:32:29| 分类:默认分类| 标签:图片转化为二进制数据字号:大中小订阅1.将Image图像文件存入到数据库中我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中.要这里有关数据的操作略写,我将一些代码段写成方法,方便直接调用.//根据文件名(完全路径)public byte[] SetImageToByteArray(string fileName){FileStream fs = new FileStream(fileName, FileMode.Open);int streamLength = (int)fs.Length;byte[] image = new byte[streamLength];fs.Read(image, 0, streamLength);fs.Close();return image;}//另外,在中通过FileUpload控件得到的图像文件可以通过以下方法public byte[] SetImageToByteArray(FileUpload FileUpload1) {Stream stream = FileUpload1.PostedFile.InputStream;byte[] photo = newbyte[FileUpload1.PostedFile.ContentLength];stream.Read(photo, 0, FileUpload1.PostedFile.ContentLength);stream.Close();return photo;}2.从SQL Server数据库读取Image类型的数据,并转换成bytes[]或Image图像文件//要使用SqlDataReader要加载using System.Data.SqlClient命名空间//将数据库中的Image类型转换成byte[]public byte[] SetImage(SqlDataReader reader){return (byte[])reader["Image"];//Image为数据库中存放Image 类型字段}//将byte[]转换成Image图像类型//加载以下命名空间using System.Drawing;/using System.IO;using System.Data.SqlClient;*/public Image SetByteToImage(byte[] mybyte){Image image;MemoryStream mymemorystream = new MemoryStream(mybyte,0, mybyte.Length);image = Image.FromStream(mymemorystream); return image;}。
图片和base64编码字符串互相转换,图片和byte数组互相转换
图⽚和base64编码字符串互相转换,图⽚和byte数组互相转换图⽚和base64编码字符串互相转换import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import java.io.*;/*** @author lishupeng* @create 2017-05-06 下午 2:56**/public class Base64Test {public static void main(String[] args) {String strImg = GetImageStr();System.out.println(strImg);GenerateImage(strImg);}//图⽚转化成base64字符串public static String GetImageStr() {//将图⽚⽂件转化为字节数组字符串,并对其进⾏Base64编码处理String imgFile = "C:\\Users\\Administrator\\Desktop\\a\\1.png";//待处理的图⽚InputStream in = null;byte[] data = null;//读取图⽚字节数组try {in = new FileInputStream(imgFile);data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {e.printStackTrace();}//对字节数组Base64编码BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(data);//返回Base64编码过的字节数组字符串}//base64字符串转化成图⽚public static boolean GenerateImage(String imgStr) { //对字节数组字符串进⾏Base64解码并⽣成图⽚if (imgStr == null) //图像数据为空return false;BASE64Decoder decoder = new BASE64Decoder();try {//Base64解码byte[] b = decoder.decodeBuffer(imgStr);for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {//调整异常数据b[i] += 256;}}//⽣成jpeg图⽚String imgFilePath = "d://222.jpg";//新⽣成的图⽚OutputStream out = new FileOutputStream(imgFilePath);out.write(b);out.flush();out.close();return true;} catch (Exception e) {return false;}}图⽚和byte数组互相转换import javax.imageio.stream.FileImageInputStream;import javax.imageio.stream.FileImageOutputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;/*** @author lishupeng* @create 2017-05-06 下午 3:48**/public class Image2Byte {public static void main(String[] args){byte[] data = image2byte("C:\\Users\\Administrator\\Desktop\\a\\1.png");System.out.println(data.toString());byte2image(data,"d://222.jpg");}//图⽚到byte数组public static byte[] image2byte(String path) {byte[] data = null;FileImageInputStream input = null;try {input = new FileImageInputStream(new File(path));ByteArrayOutputStream output = new ByteArrayOutputStream();byte[] buf = new byte[1024];int numBytesRead = 0;while ((numBytesRead = input.read(buf)) != -1) {output.write(buf, 0, numBytesRead);}data = output.toByteArray();output.close();input.close();} catch (FileNotFoundException ex1) {ex1.printStackTrace();} catch (IOException ex1) {ex1.printStackTrace();}return data;}//byte数组到图⽚public static void byte2image(byte[] data, String path) {if (data.length < 3 || path.equals("")) return;try {FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path)); imageOutput.write(data, 0, data.length);imageOutput.close();System.out.println("Make Picture success,Please find image in " + path);} catch (Exception ex) {System.out.println("Exception: " + ex);ex.printStackTrace();}}//byte数组到16进制字符串public String byte2string(byte[] data) {if (data == null || data.length <= 1) return "0x";if (data.length > 200000) return "0x";StringBuffer sb = new StringBuffer();int buf[] = new int[data.length];//byte数组转化成⼗进制for (int k = 0; k < data.length; k++) {buf[k] = data[k] < 0 ? (data[k] + 256) : (data[k]);}//⼗进制转化成⼗六进制for (int k = 0; k < buf.length; k++) {if (buf[k] < 16) sb.append("0" + Integer.toHexString(buf[k]));else sb.append(Integer.toHexString(buf[k]));}return "0x" + sb.toString().toUpperCase();}}。
C#程序中将图片转换为byte数组,并将byte数组转换为图片
C#程序中将图⽚转换为byte数组,并将byte数组转换为图⽚/// <summary>/// 将图⽚以⼆进制流/// </summary>/// <param name="path"></param>/// <returns></returns>public byte[] SaveImage(String path){FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); //将图⽚以⽂件流的形式进⾏保存BinaryReader br = new BinaryReader(fs);byte[] imgBytesIn = br.ReadBytes((int)fs.Length); //将流读⼊到字节数组中return imgBytesIn;}/// <summary>/// 现实⼆进制流代表的图⽚/// </summary>/// <param name="imgBytesIn"></param>public void ShowImgByByte(byte[] imgBytesIn){string NewImageName = "AAAA";//ImageName(CenterId);//获得图⽚的名字string ImagePath = @"F:/AQPXImageURL/" + NewImageName.ToString() + ".jpg";MemoryStream ms = new MemoryStream(imgBytesIn);Bitmap bmp = new Bitmap(ms);bmp.Save(ImagePath, ImageFormat.Bmp);ms.Close();//return NewImageName;//pictureBox1.Image = Image.FromStream(ms);}/// <summary>/// 这是⽤于测试/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void btn_jituan_Click(object sender, EventArgs e){byte[] bys = SaveImage("E:/LYX/SafeTrainAll_AQPX/SafeTrainAll_AQPX/DefaultModule/Exam/ExamImage/2015-08-10#2/00000052x1.jpg");ShowImgByByte(bys);}。
C#对象、文件与二进制串(byte数组)之间的转换
C#对象、⽂件与⼆进制串(byte数组)之间的转换转载地址:1.关于本⽂在使⽤C#下的TCP(类TcpClient)、UDP(类UdpClient)协议传输信息时,都需要将信息转换为byte类型的数组进⾏发送。
本⽂实现了两种object与byte数组的转换和⼀种⽂件与byte数组转换的⽅式。
基础类型的数据,可以⽤BitConverter类中的函数进⾏转换。
2.object与byte[]的相互转换:使⽤IFormatter的Serialize和Deserialize进⾏序列化与反序列化实现这个功能,需要先引⽤三个命名空间:System.IO、System.Runtime.Serialization、System.Runtime.Serialization.Formatters.Binary;/// <summary>/// ⼯具类:对象与⼆进制流间的转换/// </summary>class ByteConvertHelper{/// <summary>/// 将对象转换为byte数组/// </summary>/// <param name="obj">被转换对象</param>/// <returns>转换后byte数组</returns>public static byte[] Object2Bytes(object obj){byte[] buff;using (MemoryStream ms = new MemoryStream()){IFormatter iFormatter = new BinaryFormatter();iFormatter.Serialize(ms, obj);buff = ms.GetBuffer();}return buff;}/// <summary>/// 将byte数组转换成对象/// </summary>/// <param name="buff">被转换byte数组</param>/// <returns>转换完成后的对象</returns>public static object Bytes2Object(byte[] buff){object obj;using (MemoryStream ms = new MemoryStream(buff)){IFormatter iFormatter = new BinaryFormatter();obj = iFormatter.Deserialize(ms);}return obj;}}调⽤⽰例:假设有⼀个添加了Serializable特性的结构:/// <summary>/// 测试结构/// </summary>[Serializable]struct TestStructure{public string A; //变量Apublic char B; //变量Bpublic int C; //变量C/// <summary>/// 构造函数/// </summary>/// <param name="paraA"></param>/// <param name="paraB"></param>/// <param name="paraC"></param>public TestStructure(string paraA, char paraB, int paraC){this.A = paraA;this.B = paraB;this.C = paraC;}/// <summary>/// 输出本结构中内容/// </summary>/// <returns></returns>public string DisplayInfo(){return string.Format("A:{0};B:{1};C:{2}", this.A, this.B, this.C);}}那么调⽤下⾯的代码可以完成这个结构的转换static void Main(string[] args){TestStructure tsA = new TestStructure("1234", '5', 6);byte[] bytTemp = ByteConvertHelper.Object2Bytes(tsA);Console.WriteLine("数组长度:" + bytTemp.Length);TestStructure tsB = (TestStructure)ByteConvertHelper.Bytes2Object(bytTemp);Console.WriteLine(tsB.DisplayInfo());Console.ReadLine();}输出为:需要注意的是,⽤这个⽅式进⾏结构与byte数组间的转换,结构或类必须有Serializable特性。
jpeg的字节格式数组 -回复
jpeg的字节格式数组-回复这是一个关于JPEG的字节格式数组的主题,下面我将逐步回答。
JPEG,全称为Joint Photographic Experts Group,是一种用于图像压缩的常见文件格式。
它使用了一种称为离散余弦变换(DCT)的技术,将图像数据压缩为字节格式数组。
首先,让我们来了解一下字节格式数组是什么。
字节格式数组是指将数据以字节为单位存储在一个连续的内存区域中。
在计算机中,每个字节占8个比特(bit),可以表示0-255的整数值。
当我们将一张JPEG图像加载到计算机内存中时,它被表示为一个字节格式数组。
这个数组包含了图像的所有像素值,每个像素值都对应一个字节。
字节格式数组通常是一维数组,可以按照某种方式进行索引,以便访问特定像素的值。
要理解JPEG的字节格式数组,我们需要了解JPEG编码的过程。
JPEG编码是一个有损压缩过程,它会根据图像的特性去除某些细节,以减小文件大小。
压缩的目标是尽量保持人眼对图像细节的感知,同时尽可能减小文件大小。
JPEG编码过程的第一步是将图像转换为YUV颜色空间。
Y代表亮度分量,而UV代表色度分量。
这种颜色空间的选择是基于人眼对亮度和色度的感知不同。
在转换为YUV颜色空间后,图像的每个像素将被分成亮度和色度两个部分。
接下来,亮度和色度分量将被划分为8x8的图像块。
每个图像块将通过离散余弦变换(DCT)进行处理。
DCT将图像块转换为一组系数,这些系数表示图像块中不同频率的分量。
DCT之后,系数将被量化。
量化的目的是将系数舍入为更小的值,并进一步减小文件大小。
量化是通过除以一个预定的量化矩阵来完成的。
量化之后,系数将被重新排列成一个线性的字节格式数组。
这个数组将包含所有图像块的系数。
通常情况下,这个数组是按照从左到右、从上到下的顺序排列的。
最后,字节格式数组将被压缩为JPEG文件格式。
压缩过程使用了一种称为哈夫曼编码的技术,它通过使用较短的码字表示出现频率较高的像素值,从而减小文件大小。
C#stringbyte[]Base64常用互相转换
C#stringbyte[]Base64常⽤互相转换定义string变量为str,内存流变量为ms,⽐特数组为bt1.字符串=>⽐特数组byte[] bt=System.Text.Encoding.Default.GetBytes("字符串");byte[] bt=Convert.FromBase64String("字符串");补充:System.Text.Encoding.Unicode.GetBytes(str);System.Text.Encoding.UTF8.GetBytes(str);System.Text.Encoding.GetEncoding("gb2312").GetBytes(str); //指定编码⽅式string str = "中国?ss123?";byte[] bytes = System.Text.Encoding.Default.GetBytes(str); //gb2312编码汉字占2个字节、英⽂字母占1个字节 bytes长度为12 string s = System.Text.Encoding.Default.GetString(new byte[] { bytes[0],bytes[1] });//解码后为“中”byte[] bytes = {97, 98, 99, 100, 101, 102};string str = System.Text.Encoding.ASCII.GetString(bytes); //结果为:abcdef2.⽐特数组=>字符串string str=System.Text.Encoding.Default.GetString(bt);string str=Convert.ToBase64String(bt);3.字符串=>流MemoryStream ms=new MemoryStream(System.Text.Encoding.Default.GetBytes("字符串"));MemoryStream ms=new MemoryStream(Convert.FromBase64String("字符串"));4.流=>字符串string str=Convert.ToBase64String(ms.ToArray());string str=System.Text.Encoding.Default.GetString(ms.ToArray());5.⽐特数组=>流MemoryStream ms=new MemoryStream(bt);MemoryStream ms=new MemoryStream();ms.Read(bt,0,bt.Lenght);6.流=>⽐特数组byte[] bt=ms.ToArray();MemoryStream ms=new MemoryStream();ms.Write(bt,0,ms.Length);7.byte[]与base64string的相互转换//在C#中//图⽚到byte[]再到base64string的转换:Bitmap bmp = new Bitmap(filepath);MemoryStream ms = new MemoryStream();bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);byte[] arr = new byte[ms.Length];ms.Position = 0;ms.Read(arr, 0, (int)ms.Length);ms.Close();string pic = Convert.ToBase64String(arr);//base64string到byte[]再到图⽚的转换:byte[] imageBytes = Convert.FromBase64String(pic);//读⼊MemoryStream对象MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);memoryStream.Write(imageBytes, 0, imageBytes.Length);//转成图⽚Image image = Image.FromStream(memoryStream);//现在的数据库开发中:图⽚的存放⽅式⼀般有CLOB:存放base64string BLOB:存放byte[]// ⼀般推荐使⽤byte[]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图片与字节数组相互转换的方法
图片与字节数组相互转换的方法
aspx.cs
 
using System;using System.IO;
using System.Drawing;
using
System.Drawing.Imaging;public partial class _2Stream : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{}protected void FileToStream(object sender, EventArgs e)
{
//将JPG图片转化成字节数组
Image image =
Image.FromFile("E:/1.jpg"); //或者使用Server.MapPath MemoryStream ms =
new MemoryStream();
image.Save(ms,
ImageFormat.Jpeg);
ms.Flush();
ms.Seek(0, SeekOrigin.Begin);
byte[]
buffer = new byte[ms.Length];
ms.Read(buffer, 0,
(int)ms.Length);//遍历字节数组
for (int i = 0; i <
buffer.LongLength; i++)
{
message.Text +=
buffer[i].ToString();
}//将字节数组转化成图像文件(自定义格式)并保存MemoryStream
ms2 = new MemoryStream(buffer, 0, buffer.Length); ms2.Seek(0,
SeekOrigin.Begin);
Image image2 =
Image.FromStream(ms2);
image2.Save("E:\\2.gif", ImageFormat.Gif);
}
 
aspx
 
<asp:Button runat="server" Text="转换"
onclick="FileToStream"
/>
<asp:TextBox ID="message" runat="server"
Width="100%" Height="600px"
TextMode="MultiLine"
Wrap="true"></asp:TextBox>
 
参考资料
如何将jpg格式图像文件转化成一系列二进制数据,又如何将此二进制数据转化成jpg格式的文件?
/begincsdn/archive/2005/07/12/19 1664.html
如何通过一个图片的URL得到该图片的尺寸大小?
/begincsdn/archive/2005/07/12/19 1663.html为了您的安全,请只打开来源可靠的网址
打开网站取消来自:
/%B4%F3%CE%B0/blog/item/39344dc 269f3b524e4dd3b63.html。