由于某种原因,我从昨天开始就一直在努力从Base64字符串生成图像,它只是无法通过测试框显示为正常,但无法创建图像文件,无论是PNG还是JPG,因此我决定在此处粘贴,也许我不知何故。
代码如下
public void generateImageFromBase64(int idnumber)
{
string connectionString = @"Data Source=DESKTOP-FJBB72F\SQLEXPRESS;Initial Catalog=ImageControl;Integrated Security=True";
SqlConnection con = new SqlConnection(connectionString);
con.Open();
string query = "select img from PDFImgTableB where id =@id";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@id", idnumber);
SqlDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
//byte[] imgData = (byte[])rd[0];
**byte[] fileData = (byte[])rd.GetValue(0);
string img = Convert.ToString(fileData);**
var bytes = Convert.FromBase64String(img);
using (var imageFile = new FileStream(@"C:\Users\*****\Desktop\output\test.png", FileMode.Create))
{
imageFile.Write(bytes, 0, bytes.Length);
imageFile.Flush();
}
}
}
现在我正在使用winform调用它来生成图像文件,看起来像这样
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp8
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ReadAndConverttoJPG.ReadFileDB drd = new ReadAndConverttoJPG.ReadFileDB();
private void button1_Click(object sender, EventArgs e)
{
try
{
drd.generateImageFromBase64(2);
MessageBox.Show("OK!");
}
catch(Exception ex)
{
MessageBox.Show("Error: "+ex.ToString());
}
}
}
}
我在这里想念什么?
修改
Klaus,现在是这里了,与以前的PDF不同,似乎没有将PNG图像输出到我的桌面文件夹中
代码现在看起来像这样
public void generateImageFromBase64(int idnumber)
{
string connectionString = @"Data Source=DESKTOP-FJBB72F\SQLEXPRESS;Initial Catalog=ImageControl;Integrated Security=True";
SqlConnection con = new SqlConnection(connectionString);
con.Open();
string query = "select img from PDFImgTableB2 where id =@id";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@id", idnumber);
SqlDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
string imgBase64 = rd.GetString(0);
var bytes = Convert.FromBase64String(imgBase64);
FileStream fs = new FileStream(@"C:\Users\*****\Desktop\output\test.png", FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Close();
}
}
答案 0 :(得分:0)
由于数据库字段包含base64字符串,只需将其作为字符串获取并转换为二进制:
string imgBase64 = rd.GetString(0);
var bytes = Convert.FromBase64String(imgBase64);