I'm saving images into the table using this code:
if (FileUploadControl.PostedFile.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
{
byte[] imagedata = MSImage.ConvertToByte(FileUploadControl);
if (imagedata != null)
{
string param = "#Image";
SqlParameter sp = spc.Add(new SqlParameter(param, SqlDbType.VarBinary, -1));
sp.Value = imagedata;
sql += ", " + Q.C(Database.MSImage) + "=" + param + ", " + Q.C(Database.MSImageType) + "=N'" + FileUploadControl.PostedFile.ContentType + "'";
}
}
And attempting to load it into background-image style with this code:
string imagedata = MSImage.ConvertToImage((byte[])ms[Database.MSImage]);
if (imagedata != null && ms[Database.MSImageType] != DBNull.Value && ((string)ms[Database.MSImageType]).StartsWith("image/", StringComparison.OrdinalIgnoreCase))
{
takzir2.InnerHtml = "<div class='msbgimage' style=\"background-image:url(data:" + (string)ms[Database.MSImageType] + ";base64, " + imagedata + ")\"></div>";
}
The problem is that it won't load the image, and when I try inspecting the element, it gets really stuck because the converted byte array returned a very long string (that sums up in about 650k characters).
This is my MSImage class:
public class MSImage
{
public static byte[] ConvertToByte(FileUpload hpf)
{
try
{
if (hpf.HasFile)
{
Stream fs = hpf.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
return bytes;
}
}
catch { }
return null;
}
public static string ConvertToImage(byte[] imagedata)
{
try
{
if (imagedata != null && imagedata.Length > 0)
return Convert.ToBase64String(imagedata);
}
catch { }
return null;
}
}
Am I saving the image in a wrong way or is it the loading that causes the issue?
EDIT:
I just found out that this code is the problem:
takzir2.InnerHtml = "<div class='msbgimage' style=\"background-image:url(data:" + (string)ms[Database.MSImageType] + ";base64, " + imagedata + ")\"></div>";
I tried using a div that has runat="server" and it worked with div.Style["background-image"], but how can I make it work with InnerHtml?
I'm using following Code to convert my Images, maybe you find a difference...
static string Image2Base64(Image image)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] imageBytes = ms.ToArray();
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
static Bitmap Base642Image(string base64image)
{
try
{
byte[] imageBytes = Convert.FromBase64String(base64image);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
Bitmap image = (Bitmap)Image.FromStream(ms, true);
return image;
}
catch { return null; }
}
I hope this might help you...
I just found the solution (It's a silly one though):
This line of code was causing the problem:
takzir2.InnerHtml = "<div class='msbgimage' style=\"background-image:url(data:" + (string)ms[Database.MSImageType] + ";base64, " + imagedata + ")\"></div>";
I changed the end of it from:
";base64, " + imagedata + ")\"></div>";
To:
";base64," + imagedata + ")\"></div>";
The space between ";base64," to imagedata was causing it because InnerHtml didn't replace the space character with %20.
Related
I want to save base64 image to a folder in application, but I have a problem in code. it gives an error as below,
Message = "Invalid length for a Base-64 char array or string."
In my code;
public static string UpdateUser(int refuser, string name, string surname,string base64)
{
string result = "FAILED";
var photo = "";
if (base64!=null && base64!="")
{
string mediaPath = Extend.GetXmlConfigParameter("media", "path")+"User\\";
string mediaName = Guid.NewGuid().ToString();
base64 = base64.Replace("data:image/png;base64,", "");
base64 = base64.Replace("data:image/jpg;base64,", "");
base64 = base64.Replace("data:image/gif;base64,", "");
base64 = base64.Replace("data:image/jpeg;base64,", "");
string filePath = mediaPath + mediaName + ".png";
try
{
byte[] bytes = Convert.FromBase64String(base64);
Image image;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms);
}
image.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
//File.WriteAllBytes(filePath, Convert.FromBase64String(base64));
photo = mediaName + ".png";
}
catch(Exception ex)
{
Logger.LogError(ex.Message, ex.StackTrace);
return result;
}
}
try
{
DataSet ds = Database.GetDataSet(con, Database.CreateSpQuery("mobile_user_update ",
new List<object> {
refuser,
name,
surname,
photo
}));
if (!Database.IsDataSetValid(ds))
return null;
result = Database.GetString(ds.Tables[0].Rows[0]["Result"]);
}
catch (Exception ex)
{
Logger.LogError(ex.Message, ex.StackTrace);
}
return result;
}
when i try to convert to byte array with below step in code
byte[] bytes = Convert.FromBase64String(base64);
I take this error. my example base64 string is
data:image/png;base64,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
How can I solve this problem.
Thanks in advance.
It looks that you getting this base64 string through url. If so, you should encode it , before it send to the client.
HttpUtility.UrlEncode(base64string)
I'm comparing two images; the source is in my solution (and saving it to memory stream) and other I am downloading using 'WebClient' converting it to bytes and then saving it in a stream, then comparing the streams.
They are exactly the same image. However my code produces different hash strings, so the 'If Equals' produces a false.
I'm thinking the downloading and saving of the image is altering the string.
The code:
public void CompareImages(string icon)
{
WebClient wc = new WebClient();
MemoryStream ms = new MemoryStream();
Image expectedImage = Image.FromFile(AppConfig.ToolsFilesFolderName + string.Format("\\" + icon +".png"));
expectedImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
String firstBitmap = Convert.ToBase64String(ms.ToArray());
ms.Position = 0;
MemoryStream ms2 = null;
byte[] bytes;
var baseEventType = _driver.FindElement(By.XPath("//div[#id='EventsView2_tv']/div/div")); ///div/div/div[19] //what i need to do is expand all of them and then
int count = 0;
var eventTypeExists = baseEventType.FindElements(By.TagName("tr"));
for (int i = 0; i < eventTypeExists.Count; i++)
{
if (i>30)
return;
if (eventTypeExists[i].Text.Trim().ToLower().Equals(icon.ToLower()))
{
var imgPath = eventTypeExists[i].FindElement(By.XPath("td[3]/img"));
var imageUrl = imgPath.GetAttribute("src");
bytes = wc.DownloadData(imageUrl);
ms2 = new MemoryStream(bytes);
Image actualImage = Image.FromStream(ms2);
actualImage.Save(ms2, System.Drawing.Imaging.ImageFormat.Png);
String secondBitmap = Convert.ToBase64String(ms2.ToArray());
if (firstBitmap.Equals(secondBitmap))
{
Reporter.ReportNote(string.Format("'{0}' icon in '{1}' is correct",
icon, ScenarioContext.Current["contractName"] + "/" + eventTypeExists[i].FindElement(By.XPath("../../../../table[" + (i - 2) + "]")).Text),
Status.Pass);
}
else
{
Reporter.ReportNote(string.Format("Icons are not correct, offending image is located within '{0}'",
ScenarioContext.Current["contractName"] + "/" + eventTypeExists[i].FindElement(By.XPath("../../../../table[" + (i - 2) +"]")).Text),
Status.Done);
}
ms2.Dispose();
}
count++;
}
ms.Dispose();
wc.Dispose();
}
I have web application which will convert image to base64 string. pass it to WCF service and serivce methods will convert the string back to png image.
Client Side (Convert Image to Base 64)
public static string ImageToBase64(string path)
{
using (Image image = Image.FromFile(path))
{
using (MemoryStream m = new MemoryStream())
{
image.Save(m, image.RawFormat);
byte[] imageBytes = m.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
}
WCF Serive Method
CommonDataManager.Base64ToImage(designImage).Save(designQuotePath + "/" + "Request_Quote_" + objQuote.Customer_Id.ToString(), ImageFormat.Png);
public static Image Base64ToImage(string base64String)
{
Image image = null;
try
{
byte[] imageBytes = System.Convert.FromBase64String(base64String);
using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
image = Image.FromStream(ms, true);
}
}
catch (Exception ex)
{
LogManager.LogException(ex, "Base64ToImage");
}
return image;
}
Issues :
It is giving output as normal file not .png file.
Is there any special things need to be checked before sending base64 string to wcf service method as parameter ?
Thanks in advance.
You need to add the extension. Update this:
CommonDataManager.Base64ToImage(designImage).Save(designQuotePath + "/" +
"Request_Quote_" + objQuote.Customer_Id.ToString(), ImageFormat.Png);
To
CommonDataManager.Base64ToImage(designImage).Save(designQuotePath + "/" +
"Request_Quote_" + objQuote.Customer_Id.ToString() + ".png", ImageFormat.Png);
I'm trying to convert a stream to image using C#, but the image is appearing corrupt.
Here is how i'm getting the BaseString representation
byte[] imageArray = System.IO.File.ReadAllBytes(#"C:\Users\jay.raj\Desktop\images\images\tiger.jpg");
string base64ImageRepresentation = Convert.ToBase64String(imageArray);
Now I'm passing this to a function which converts it into Stream and tries to convert it into image file.
byte[] byteArray = Encoding.ASCII.GetBytes(mySettingInfo.FileToUpload);
MemoryStream stream = new MemoryStream(byteArray);
UtilityHelper.UploadImageFormDevice(stream, ref ss);
Here is the UploadImageFormDevice function:
public static ResponseBase UploadImageFormDevice(Stream image, ref string imageName)
{
ResponseBase rep = new ResponseBase();
try
{
string filname = imageName;
string filePath = #"C:\Users\jay.raj\Desktop\Upload\";
if (filname == string.Empty)
filname = Guid.NewGuid().ToString() + ".jpg";
filePath = filePath + "\\" + filname;
FileStream fileStream = null;
using (fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
{
const int bufferLen = 1024;
byte[] buffer = new byte[bufferLen];
int count = 0;
while ((count = image.Read(buffer, 0, bufferLen)) > 0)
{
fileStream.Write(buffer, 0, count);
}
fileStream.Close();
image.Close();
}
imageName = filname;
}
catch (Exception ex)
{
rep.Code = 1000;
rep.Message = "Server Error";
}
return rep;
}
As #naivists wrote try replace this line:
byte[] byteArray = Encoding.ASCII.GetBytes(mySettingInfo.FileToUpload);
To this line:
byte[] byteArray = Convert.FromBase64String(mySettingInfo.FileToUpload);
It looks like you want to transfer a file from #"C:\Users\jay.raj\Desktop\images\images\tiger.jpg" to #"C:\Users\jay.raj\Desktop\Upload\" + "\\" + Guid.NewGuid().ToString() + ".jpg".
In your case you read the file as a byte array, convert it into a base 64 coded string and then again into a byte array. This is unnecessary and error prone. In your case you missed the decoding.
If you ignore for a moment that it is an image and see it just as a bunch of bytes things might get easier.
string srcPath = #"C:\Users\jay.raj\Desktop\images\images\tiger.jpg";
string dstPath = #"C:\Users\jay.raj\Desktop\Upload\" + "\\" + Guid.NewGuid().ToString() + ".jpg";
byte[] imageArray = System.IO.File.ReadAllBytes(srcPath);
System.IO.File.WriteAllBytes(dstPath, imageArray);
Following is the code to retrieve image from database and then saving it to a folder.
public string BinarytoNewsImage(int ID)
{
byte[] btimage = null;
string image = "";
string filename = null;
int mediaid;
DataSet dsNews = new DataSet();
adp = new SqlDataAdapter("Select Top 1 * from tblNew Where intNewId=" + ID, offcon);
adp.Fill(dsNews, "tblNews1");
if (dsNews.Tables["tblNews1"].Rows.Count > 0)
{
if (dsNews.Tables["tblNews1"].Rows[0]["strImage"] != DBNull.Value)
{
btimage = (byte[])dsNews.Tables["tblNews1"].Rows[0]["strImage"];
mediaid = Convert.ToInt32(dsNews.Tables["tblNews1"].Rows[0]["intMediaId"].ToString());
filename = dsNews.Tables["tblNews1"].Rows[0]["strfilename"].ToString();
image = BinarytoImage(btimage, mediaid);
}
else
{
filename = dsNews.Tables["tblNews1"].Rows[0]["strfilename"].ToString();
image = "http://www.patrika.com/media/" + filename;
}
}
return image;
}
public string BinarytoImage(byte[] stream, int ID)
{
string ImagePath = "";
string Image = ID + ".jpg";
var URL = System.Configuration.ConfigurationManager.AppSettings["ImagePath"].ToString();
string FolderName = new Uri(URL).LocalPath;
var help = HttpContext.Current.Server.MapPath(FolderName);
if (Directory.Exists(HttpContext.Current.Server.MapPath(FolderName)))
{
string[] files = Directory.GetFiles(HttpContext.Current.Server.MapPath(FolderName), ID + ".jpg");
if (files.Length > 0)
{
ImagePath = URL + ID + ".jpg";
}
else
{
using (MemoryStream MS = new MemoryStream(stream, 0, stream.Length))
{
MS.Write(stream, 0, stream.Length);
System.Drawing.Image img = System.Drawing.Image.FromStream(MS);
img.Save(help + ID + ".jpg", System.Drawing.Imaging.ImageFormat.Gif);
img.Dispose();
img = null;
ImagePath = URL + ID + ".jpg";
}
}
}
return ImagePath;
}
Everything is working fine the images are saving to a folder but my problem is images are getting blur after retrieval.
I just don't know the reason as when I am using another code for retrieval than images are coming fine but are not saved to folder:
DataSet dsNews = new DataSet();
adp = new SqlDataAdapter("Select Top 1 * from tblNew Where intNewId=901371", con);
adp.Fill(dsNews, "tblNews1");
if (dsNews.Tables["tblNews1"].Rows[0]["strImage"] != DBNull.Value)
{
byte[] btimage = (byte[])dsNews.Tables["tblNews1"].Rows[0]["strImage"];
Response.ContentType = "image/jpeg";
Response.BinaryWrite(btimage);
}
I need those images to be saved to folder so that I don't have to call database after once image comes.
Wouldn't it help to change this line
img.Save(help + ID + ".jpg", System.Drawing.Imaging.ImageFormat.Gif);
to store it as JPEG rather? as that's the source format
EDIT:
Your are not moving the stream pointer back to the start.
Try change these lines:
using (MemoryStream MS = new MemoryStream(stream, 0, stream.Length))
{
MS.Write(stream, 0, stream.Length);
System.Drawing.Image img = System.Drawing.Image.FromStream(MS);
...
To
using (MemoryStream MS = new MemoryStream(stream, 0, stream.Length))
{
MS.Write(stream, 0, stream.Length);
MS.Seek(0, SeekOrigin.Begin);
System.Drawing.Image img = System.Drawing.Image.FromStream(MS);
...
I write the common method, all is ok.
Maybe your byte[]stream is not right,pls check.
byte[] stream = File.ReadAllBytes(#"D:\YWG\123.jpg");
using (MemoryStream MS = new MemoryStream(stream, 0, stream.Length))
{
MS.Write(stream, 0, stream.Length);
using (Image img = Image.FromStream(MS))
{
img.Save(#"D:\dd.jpg", System.Drawing.Imaging.ImageFormat.Gif);
}
}
I see the dest file "dd.jpg" is ok.