Byte[]与图片互相转换,保存到本地

本文介绍如何将图片文件转换为字节流(byte[])形式,并提供了将字节流还原为图片的方法。同时,文章还展示了如何使用这些方法从数据库读取图片数据并保存到本地。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//图片路径转换为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;
}
//byte[]格式转为图片
public static Image BytesToImage(byte[] bytes)
{
MemoryStream ms = new MemoryStream(bytes);
Image img = Image.FromStream(ms);
return img;
}
示例:
string picpath = Server.MapPath("~/images/hn.jpg");
byte[] photo = GetPictureData(picpath); //调用方法,转换为byte[]
Image image1 = BytesToImage(photo); //byte[]转换为图片
//保存图片到本地 方法一
System.Drawing.Bitmap image = new System.Drawing.Bitmap(image1);
string imgname = DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";
string path = "~/images/" + imgname;
image.Save(Server.MapPath(path));
this.img1.ImageUrl = path;
//保存图片到本地 方法二
string path = Server.MapPath("~/images").TrimEnd('\\') + @"\";//转为物理路径
System.IO.FileStream fs = new System.IO.FileStream(path + "123.jpg", System.IO.FileMode.Create);//注意123.jpg为你的图片名称

System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs);
bw.Write(photo, 0, photo.Length);
fs.Flush();//数据写入图片文件
fs.Close();

示例:从数据库读取数据保存到本地照片
DataTable dt = pager.GetTableView("tmp", " 1=1 ");
for (int i = 0; i < dt.Rows.Count; i++)
{
byte[] photo = new byte[0];
string imgname = "";
if (!string.IsNullOrEmpty(dt.Rows[i]["photo"].ToString()))
{
photo = (byte[])dt.Rows[i]["photo"];//读取第一个图片的位流
int ArraySize = photo.GetUpperBound(0);//获得数据库中存储的位流数组的维度上限,用作读取流的上限
imgname = DateTime.Now.ToString("yyyyMMddhhmmss") + i + ".jpg";
//string path = Server.MapPath("~/images").TrimEnd('\\') + @"\";//项目路径转为物理路径
string path = "F:\\pic\\".TrimEnd('\\') + @"\";//物理路径
System.IO.FileStream fs = new System.IO.FileStream(path + imgname, System.IO.FileMode.Create);//注意123.jpg为你的图片名称
System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs);
bw.Write(photo, 0, photo.Length);
fs.Flush();//数据写入图片文件
fs.Close();
string sql = "insert into tmpxx(aab004,aac003,aae135,photo) values ('" + dt.Rows[i]["aab004"].ToString() + "','" + dt.Rows[i]["aac003"].ToString() + "','" + dt.Rows[i]["aae135"].ToString() + "','" + "/UploadFiles/UserIcon/2016/1025/" + imgname + "')";
int m = pager.RunSql(sql);
}
else {
string sql = "insert into tmpxx(aab004,aac003,aae135,photo) values ('" + dt.Rows[i]["aab004"].ToString() + "','" + dt.Rows[i]["aac003"].ToString() + "','" + dt.Rows[i]["aae135"].ToString() + "','')";
int m = pager.RunSql(sql);
}

### 鸿蒙模拟器中的图片传输功能 在鸿蒙操作系统中,如果要在模拟器环境中实现图片传输功能,主要依赖于HarmonyOS的应用程序编程接口(API)以及特定的服务框架。以下是关于如何通过鸿蒙模拟器实现图片传输的一些关键点: #### 1. 使用DataAbilityHelper进行数据存储访问 为了在应用之间共享图片资源,可以利用`DataAbilityHelper`来操作数据库或文件系统。开发者可以通过此工具读取本地存储的图片文件,并将其传递至目标位置。 ```java // 创建 DataAbilityHelper 实例 Uri uri = Uri.parse("dataability://path/to/your/image"); DataAbilityHelper helper = DataAbilityHelper.creator(context); // 获取图片流 InputStream inputStream = helper.openFile(uri, "r")[^3]; ``` 这里的代码片段展示了如何使用 `openFile()` 方法获取指定 URI 的输入流,从而加载一张图片用于后续处理。 #### 2. 调用Distributed File System (DFS)服务 对于跨设备间的数据同步需求,则可借助分布式文件系统(DFS),它允许不同终端上的应用互相分享媒体资料等内容。具体来说,在源端调用上传接口把图像存入云端;而在接收方则需监听下载事件并将接收到的数据保存下来形成新的Bitmap对象显示出来。 ```java // 初始化 DFS 客户端实例 IDfsClient dfsClient = DfsFactory.createDfsClient(); // 设置远程路径参数 String remotePath = "/remote/device/path"; byte[] imageData; // 假设已获得待发送的字节数组形式的图片数据 // 执行上传动作 dfsClient.upload(remotePath, new ByteArrayInputStream(imageData))[^4]; ``` 以上示例说明了怎样运用DFS库里的upload()函数向另一台联网装置传送二进制编码后的图形素材。 #### 3. 利用Intent机制启动其他组件携带附加信息 当仅限同一款APP内部交流时还可以考虑采用intent方式通知另一个feature ability去展示某张照片副本。此时只需构建好包含extras字段的标准意图结构体即可轻松达成目的。 ```java // 构建 Intent 并添加额外数据 Intent intent = new Intent(); intent.setBundleName("com.example.appname"); intent.setAction("action_show_image"); // 将 Bitmap 数据转换byte 数组作为 Extra 参数附带过去 ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); intent.putExtra("image_data", byteArray); context.startAbility(intent)[^5]; ``` 上述例子解释了创建一个带有extra属性的intent的过程,其中包含了压缩过的位图数据,最后通过startAbility发起请求让目标activity呈现这张预览图。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值