I am able to convert image to base64 string and base64 string to image . And I am saving the image to a particular location. If I run for the first time, I am getting the correct image file which I gave as input. but from the second run, whatever may be the input image I pass, I am getting only the first input image.
Desired output :
I need to get back the input image that I passed.
conversion code :
public string ImageToBase64(Image image, ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
public Image Base64ToImage(string base64String)
{
// Convert Base64 String to byte[]
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0,
imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);
return image;
}
save file code :
public void retreiveAndSaveImgFile(string base64formofstr)
{
Console.WriteLine("the incoming string :: " + base64formofstr.Length);
/* Bitmap bitmap = new Bitmap(Base64ToImage(base64formofstr));
Bitmap newBitmap = new Bitmap(bitmap);
newBitmap.SetResolution(150, 150); // resolution of the original image for which the zone template is created
newBitmap.Save("D:\\Suraya\\TesttogetCorrectPutput\\MICR_SAMPLE.tif", ImageFormat.Tiff);*/
Base64ToImage(base64formofstr).Save("D:\\Suraya\\TesttogetCorrectPutput\\MICR_SAMPLE.tif");
}
Please help me in resolving this problem.
I am not that smart with all of this but till I understand the problem you have is because of cache... As you are using the same name all time, it shows the output from the cache instead of conversion..
First Alternate is to add a time stamp to the name of image..
Second Alternate is to force the browser to reload the complete page instead of showing it from the cache..
Related
I want to download an image has link like this:
data:image/png;base64,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
but when I use:
WebClient webClient = new WebClient();
webClient.DownloadFile(remoteFileUrl, localFileName);
it throw to exception: "uri prefix is not recognized"
There is NO image link to download. It is base64 representation of the image, so the image is encoded in the string and embedded into the document.
You can get the base64 representation of the string and convert it to image as done here. Pasting the code for quick reference.
public Image Base64ToImage(string base64String)
{
// Convert base 64 string to byte[]
byte[] imageBytes = Convert.FromBase64String(base64String);
// Convert byte[] to Image
using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
Image image = Image.FromStream(ms, true);
return image;
}
}
I have an image string contain in an XML file and want to convert the string into an image. I have used the following code which is giving error: Parameter is not valid.
Code is following which is give above error:
Byte[] data = new Byte[0];
byte[] array = Encoding.ASCII.GetBytes("D:\notimg.txt");
MemoryStream mem = new MemoryStream(array);
pictureBox1.InitialImage = null;
pictureBox1.Image = Image.FromStream(mem);
Below is the data contained in XML tag which I need to convert into the image and display into picture box, I have placed the below data into a notepad file and removed the XML tag . Please, anyone, guide how to display the below data into an image. Thanks in advance.
<photograph>/9j/4AAQSkZJRgABAQECWAJYAAD/4QBuRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAZKGAAcAAAA6AAAALAAAAABVTklDT0RFAABDAHIAZQBhAHQAZQBkACAAYgB5ACAAQQBjAGMAdQBTAG8AZgB0ACAAQwBvAHIAcAAu/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgBwgFeAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A9+opaT0oAKKWigBKKWigBKKWkoAKKKKACiiigAoopaAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKAEopaKACk9KWk9KAFooooAKKKKACkpaSgAooooAKKKKAClpKWgAoorPv8AVrLTE3XM6oeyDlj9BSvYDQorir7xm5hb7HCIgDgPKRk/Qf8A665O61+7uSftF5K4btuwPyHFLmFc9aNzAhwZo1PoWAqNdQtHYqlzExBwdrA4rxv+0FUYXNDX4btjtSuxXPZ2u4V6yxj6uBSC8gP3Z4T9JBXixmyODSbzngD8RRdjue3CXd0XI/2SDQZFX72VHuOK8agvZbfOw7c+gq9beItRtyPLvZl56Ftw/I5p3C560CCMg5HtTq89tPGN3G37+GKYf3l+RvxxwfyretPFNpOPmYj1DDDD+hp3C50lFRRTRzxrJE4ZWGQQalpjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKT0paSgBaKKKACiiigApKWkoAKKKKACiiigAqKWWOCJpJGCIgyWPAApZpo7eJpZWCovJJrzfxJ4hOp3DW0MgW2jOc54b396luwmy7rPjdyWh0zCAcecwyT9AelchPqMjuzyMzyP1Zjk1Ukl6hTx796rs1KxJPJclzk5zUJl9Kjyc8flTSSOq4FCVgJi3oAaRnz0Tb9Ki3gDgUB8U7jJVJ/vfnUyuynqCBUAb0FOXd6UgsWlkODlfxp4NQKrdxx9KeuV/CmFiyuVI2uRViOV88kfUcVQEn4EVKkoPUflQB0uk63cacQI2DxE8o39Peu60zVINSi3RnBAGVPUV5TG68bTx+lX7LUptPuhMhPoy9jQhbHrNFUtPvYr+yjniPDAZHcH0q7VFhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAlFFFABRRRQAUUUUAFFFFABRRRQAU1mVF3MQAKGIVSScAck1x3inxE1kv2eA4mccf9Mx6/U9vSk3YTdjL8Za21xOLOGQrFGfnUHqfeuKkf5sg5xT55NzEs2SaqtIBx6VCXclCn3qMntxTS2e5FNyv940xjs4HBINKST940wAfSlBI44FAIcB2HFSKvuajU4z81OXGeTQth2JVOPTiplGccZqEoNu5WP50qSFOWUsB6HFAiflT8v5UqzA9SUbpVd7mNum5SPU803zMcsA49RSuBZ80g4Kqw/I07tvjOR3HcVSEmMN1/pUgf8AjTgjqKdwLKzbSCDwavRyCWPb0PashmzkgY3c49DU0EpRgc0MDuvBuo+VLJA7YyQMHpXbtd26j5pUX/eOK8aW7ltnE8LFGPBI7e9Oi1CfzDIJnDk5LE5Jouw1PY47y2lbakyMR6GrFeRw63fRtzMWHowyK6TSvE7p8jnHoGPy/wD1qaYJncUVTtL2O5UbflbGdpPb1B7irlUUgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqreXSWdpJO7BVRc5Jo2Fexna1qSWNpJIxG2PgDP3m7D8K8mvbvzJ5JnYu7nOSa0df1t9Um2odsMfTPc9ya52TG/nJrNa6krUa8vOf6Uwle/HvTWbsKYSTTGPLxjsW/HFAc5wFA96YBk+n1qTAUcc0gsOyxPapETPXg01flALbgPYU/wA4IRsBB9xmqDYRo2QZ2Fu9K0kQQgR4z69qYJJSSFC/yqMXbq3Qj2IyKWwD12gZ2kD+8vOKcueiPuBpquGOUOxsdu/4U/y2XGR15BFK4xsg5+dcEUi5Qe3oalXdnnml8vPNK4WIjjqBipFbB46U4Rd6csXQY5ouOwh42jtyRTgnzcdKVozwOmKkRe350XsFhwOUIPpTF4OAasqi46HNQSIQSF4+lCkKxLFICQA+D71bjlIPzZ+orMC4PuPep4d+OOcenWqFY6Kx1i4tCmx9yqcgZxiu+0fWIdTh+VgJUHzLXlCSEY7+xFX7DUJbOdZoppRRVDR//2Q==</photograph>
Quick and dirty:
var s = File.ReadAllText(#"d:\file.txt");
s = s.Replace("<photograph>", string.Empty).Replace("</photograph>", string.Empty);
var b = Convert.FromBase64String(s);
using (var mem = new MemoryStream(b))
{
pictureBox1.Image = Image.FromStream(mem);
}
It's Base64
first convert to byte[]
then use
public System.Drawing.Image Base64ToImage(byte[] imageBytes)
{
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
return image;
}
then You Will Got image..!:)
This question already has answers here:
C# Base64 String to JPEG Image
(4 answers)
Closed 7 years ago.
As an example I have converted a canvas element with a re-sized image and posted into a hidden input field that's now encoded as
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...
This value then posted to the same page which I need to convert this string into an image and save onto the server.
Code Behind File (upload.aspx)
protected void btnUpload_Click(object sender, EventArgs e)
{
HttpPostedFile filePosted = Request.Files["newinput"];
string base64String = filePosted.ToString();
// Convert Base64 String to byte[]
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
//I DONT KNOW HOW TO WRITE ABOVE INTO THE SaveAs CONDITION BELOW
if (filePosted != null && filePosted.ContentLength > 0)
{
string fileNameApplication = Path.GetFileName(filePosted.FileName);
string fileExtensionApplication = Path.GetExtension(fileNameApplication);
// generating a random guid for a new file at server for the uploaded file
string newFile = Guid.NewGuid().ToString() + fileExtensionApplication;
// getting a valid server path to save
string filePath = Path.Combine(Server.MapPath("~/Assets/") + Request.QueryString["id"] + "/", newFile);
if (fileNameApplication != String.Empty)
{
filePosted.SaveAs(filePath);
}
}
I'm pretty sure I need to convert this the imagedata to a binary file before saving on the server but I can't quite get how I need to amend the code above. Any ideas? The code to save to the server doesn't work.
Once I have converted this to an image and changed it's name as above - I'm storing this back to a database via LINQ - with a URL appended to it.
Any help would be greatly appreciated.
Hope below functions helps.
public string ImageToBase64(Image image,
System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
public Image Base64ToImage(string base64String)
{
// Convert Base64 String to byte[]
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0,
imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);
return image;
}
EDIT 1 -
From the comments it seems that you are getting base64 string and you need to save it as image on server and then whenever required you need to show that image using physical server path.
Ok. Base64ToImage will give you image for your base64 string. You can save it on server using
image.Save("PATH", System.Drawing.Imaging.ImageFormat.Jpeg);
And this "PATH" you have supplied or created can be stored in DB as URL, which you can use at the time of display.
Note: Make sure that you have write access to folder where you are saving image.
EDIT-2
Your function should look like below. Please put validation code, error handling as required.
protected void btnUpload_Click(object sender, EventArgs e)
{
HttpPostedFile filePosted = Request.Files["newinput"];
string base64String = filePosted.ToString();
// Convert Base64 String to byte[]
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);
string newFile = Guid.NewGuid().ToString() + fileExtensionApplication;
string filePath = Path.Combine(Server.MapPath("~/Assets/") + Request.QueryString["id"] + "/", newFile);
image.Save(filepath,ImageFormat.Jpeg);
}
I'm opening a tiff file from local disk:
Image multiPageImage = Image.FromFile(fileName);
Then sending it to conversion method:
base64string = ImageToBase64(multiPageImage, ImageFormat.Tiff);
public static string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
Finally I convert my base64 to tiff file with the below code:
public static void ConvertBase64ToTiff(string base64string)
{
Byte[] bitmapData = new Byte[base64string.Length];
bitmapData = Convert.FromBase64String(FixBase64ForImage(base64string));
using (MemoryStream streamBitmap = new System.IO.MemoryStream(bitmapData))
{
Bitmap bitImage = new Bitmap((Bitmap)Image.FromStream(streamBitmap));
bitImage.Save(#"C:\myTiff.tiff");
}
}
public static string FixBase64ForImage(string base64string)
{
System.Text.StringBuilder sbText = new System.Text.StringBuilder(base64string, base64string.Length);
sbText.Replace("\r\n", String.Empty);
sbText.Replace(" ", String.Empty);
return sbText.ToString();
}
That fixing method is not mine. Actually I don't know if it is the right way or not. But I searched everwhere and trying what I find.
My tests showed that base64 string has just a single image.
Any help would be greatly appreciated!
For people who have a problem about converting multi page tiff file to base64 and vice versa you can refer to that link:
Is it possible to create a base64 string which has all frames of a multi page tiff file?
Maybe it is not totally the same question but the answer will solve this one too.
I have to store an image from my WPF application to the SQLite database, and then retrieve the same image and display it in the application. I tried doing this by coverting the image into byte array and storing that byte array to the SQLite database as BLOB, but this is not working. Can someone help me?
I would suggest to convert the image to a base64 string first and then store it in the database.
In C#:
Image to Base64 String
public string ImageToBase64(Image image,
System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
Base64 String to Image
public Image Base64ToImage(string base64String)
{
// Convert Base64 String to byte[]
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0,
imageBytes.Length);
// Convert byte[] to Image
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);
return image;
}
You can save the string in the database. This question is related to it: How do i read a base64 image in WPF?
Why don't you store the path to the image relative to the application's root?