एक छवि (पथ द्वारा चयनित) को base64 स्ट्रिंग में कनवर्ट करें


111

आप उपयोगकर्ता के कंप्यूटर पर एक पथ से एक छवि को C64 में बेस 64 स्ट्रिंग में कैसे परिवर्तित करते हैं?

उदाहरण के लिए, मेरे पास छवि के लिए मार्ग है (प्रारूप में C:/image/1.gif) और एक डेटा यूआरआई रखना चाहूंगा जैसे data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD..कि 1.gifछवि को लौटाने का प्रतिनिधित्व करना ।


यदि आप सीएसएस में उन्हें एम्बेड करने जा रहे हैं, तो एक बिल्ड सिस्टम जैसे कि Gulp.js को कॉन्फ़िगर करने के बारे में सोचें, जो आपके लिए इस कार्य को संभाल सकता है
कॉन्सटेंटिन टार्कस

2
क्या आप चाहते हैं कि पथ स्ट्रिंग एन्कोडेड हो या उस स्थान पर छवि, एक डेटा URI दे?
मार्सेल

जवाबों:


192

इसे इस्तेमाल करे

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;
    }
}

5
क्यों भी इसे फिर से शुरू परेशान? आप बस फ़ाइल के बाइट्स को पढ़ सकते हैं और उन्हें परिवर्तित कर सकते हैं।
Nyerguds

1
मेरे मामले में यह था क्योंकि मैं छवि को लोड करने के बाद आकार बदलना चाहता था।
pgee70

@ नायरगुड्स मुझे लगता है कि यह इसलिए है क्योंकि इसे कच्चे स्वरूप को देखते हुए होना चाहिए image.RawFormat
फेसपालम

2
@ facepalm42 RawFormatएक छवि प्रारूप निर्दिष्ट नहीं है; यह imageऑब्जेक्ट की एक संपत्ति है , जो फ़ाइल से पढ़ते समय छवि को किस प्रारूप में देता है , इस मामले में अर्थ है, यह gif प्रारूप को लौटाएगा। इसलिए यह कुछ भी नहीं बदलता है, सिवाय इसके कि वास्तविक मूल फ़ाइल के बाइट्स के बजाय, आपके पास .Net फ्रेमवर्क द्वारा gif को पुनः सहेजे जाने के रूप में छवि के बाइट्स हैं।
Nyerguds

ध्यान दें कि किसी कारण से .Net एनिमेटेड gifs नहीं देखता है क्योंकि यह पैलेटेड छवियों के रूप में लोड होता है (केवल एनिमेटेड gif पर होता है, हालांकि यह कुछ प्रकार के png के साथ भी होता है), और जब पुन: बचत ने "उच्च रंग" छवियों को पैलेट फॉर्मेट में कहा है , यह एक मानक विंडोज 256-रंग पैलेट का उपयोग करता है। चूंकि एनिमेटेड जिफ में आमतौर पर एक अनुकूलित पैलेट होता है, इसका मतलब है कि इस प्रक्रिया के माध्यम से सहेजे गए किसी भी एनिमेटेड जिफ की गुणवत्ता खराब हो जाएगी। तो यह सेटअप निश्चित रूप से आदर्श नहीं है; केवल मूल बाइट्स पढ़ने के लिए बेहतर है, जैसा कि कंसाईरॉबोट का जवाब दिखाता है।
Nyerguds

105

बाइट सरणी ( byte[]) छवि का प्रतिनिधित्व करें, फिर उपयोग करें Convert.ToBase64String(), सेंट। इस तरह:

byte[] imageArray = System.IO.File.ReadAllBytes(@"image file path");
string base64ImageRepresentation = Convert.ToBase64String(imageArray);

किसी Base4 छवि को System.Drawing.Image में बदलने के लिए:

var img = Image.FromStream(new MemoryStream(Convert.FromBase64String(base64String)));

3
@Smith, यदि आप का अर्थ है आधार 64 से वापस कन्वर्ट करने के लिए System.Drawing.Imageआप सेंट का उपयोग कर सकते हैं। इस तरह:var img = Image.FromStream(new MemoryStream(Convert.FromBase64String(base64String)));
अरिन ग़ज़री

27

चूंकि हम में से अधिकांश ओनलीनेर्स पसंद करते हैं:

Convert.ToBase64String(File.ReadAllBytes(imageFilepath));

यदि आपको इसकी आवश्यकता Base64 बाइट सरणी के रूप में है:

Encoding.ASCII.GetBytes(Convert.ToBase64String(File.ReadAllBytes(imageFilepath)));

22

यद्यपि अधिक जटिल उत्तर ठीक है, मुझे लगता है कि यह बहुत बेहतर है

var base64String= Convert.ToBase64String(File.ReadAllBytes(pathOfPic));

यह सरल है, आपको विभिन्न स्वरूपों को फिर से व्यवस्थित और संभालने की आवश्यकता नहीं है


1
यह ओग्लास के उत्तर से एक वर्ष पहले कैसे भिन्न है ?
रफिन

8

यह वह वर्ग है जिसे मैंने इस उद्देश्य के लिए लिखा था:

public class Base64Image
{
    public static Base64Image Parse(string base64Content)
    {
        if (string.IsNullOrEmpty(base64Content))
        {
            throw new ArgumentNullException(nameof(base64Content));
        }

        int indexOfSemiColon = base64Content.IndexOf(";", StringComparison.OrdinalIgnoreCase);

        string dataLabel = base64Content.Substring(0, indexOfSemiColon);

        string contentType = dataLabel.Split(':').Last();

        var startIndex = base64Content.IndexOf("base64,", StringComparison.OrdinalIgnoreCase) + 7;

        var fileContents = base64Content.Substring(startIndex);

        var bytes = Convert.FromBase64String(fileContents);

        return new Base64Image
        {
            ContentType = contentType,
            FileContents = bytes
        };
    }

    public string ContentType { get; set; }

    public byte[] FileContents { get; set; }

    public override string ToString()
    {
        return $"data:{ContentType};base64,{Convert.ToBase64String(FileContents)}";
    }
}

var base64Img = new Base64Image { 
  FileContents = File.ReadAllBytes("Path to image"), 
  ContentType="image/png" 
};

string base64EncodedImg = base64Img.ToString();

7

आप बेस 64 स्ट्रिंग को पुनः प्राप्त करने के लिए आसानी से छवि का मार्ग पास कर सकते हैं

public static string ImageToBase64(string _imagePath)
    {
        string _base64String = null;

        using (System.Drawing.Image _image = System.Drawing.Image.FromFile(_imagePath))
        {
            using (MemoryStream _mStream = new MemoryStream())
            {
                _image.Save(_mStream, _image.RawFormat);
                byte[] _imageBytes = _mStream.ToArray();
                _base64String = Convert.ToBase64String(_imageBytes);

                return "data:image/jpg;base64," + _base64String;
            }
        }
    }

आशा है कि यह मदद करेगा।


अगर इनपुट gif है तो यह समस्या दे सकता है; यह इसे उसी प्रकार के रूप में पुनः सहेजता है (जैसा कि इससे प्राप्त हुआ है _image.RawFormat) लेकिन डेटा को माइम प्रकार के रूप में उजागर करता हैimage/jpg
Nyerguds

3

आप Server.Mapसापेक्ष पथ देने के लिए पथ का उपयोग कर सकते हैं और फिर आप या तो base64रूपांतरण का उपयोग करके छवि बना सकते हैं या आप केवल base64स्ट्रिंग जोड़ सकते हैं image src

byte[] imageArray = System.IO.File.ReadAllBytes(Server.MapPath("~/Images/Upload_Image.png"));

string base64ImageRepresentation = Convert.ToBase64String(imageArray);

1

इस तरह यह सरल है, जहां आप छवि को पास करते हैं और फिर प्रारूप को पास करते हैं।

private static string ImageToBase64(Image image)
{
    var imageStream = new MemoryStream();
    try
    {           
        image.Save(imageStream, System.Drawing.Imaging.ImageFormat.Bmp);
        imageStream.Position = 0;
        var imageBytes = imageStream.ToArray();
        var ImageBase64 = Convert.ToBase64String(imageBytes);
        return ImageBase64;
    }
    catch (Exception ex)
    {
        return "Error converting image to base64!";
    }
    finally
    {
      imageStream.Dispose;
    }
}

0

निम्नलिखित कोड मेरे लिए काम करता है:

string image_path="physical path of your image";
byte[] byes_array = System.IO.File.ReadAllBytes(Server.MapPath(image_path));
string base64String = Convert.ToBase64String(byes_array);

0

शीर्ष मतदान जवाब के आधार पर, C # 8 के लिए अद्यतन किया जा सकता है। निम्नलिखित बॉक्स से बाहर का उपयोग किया जा सकता है। किसी अन्य नाम स्थान से डिफ़ॉल्ट रूप से उस वर्ग का उपयोग करने System.Drawingसे पहले स्पष्ट जोड़ा गया Image

public static string ImagePathToBase64(string path)
{
    using System.Drawing.Image image = System.Drawing.Image.FromFile(path);
    using MemoryStream m = new MemoryStream();
    image.Save(m, image.RawFormat);
    byte[] imageBytes = m.ToArray();
    tring base64String = Convert.ToBase64String(imageBytes);
    return base64String;
}

-3

आप इसे इस तरह परिवर्तित कर सकते हैं

  string test = @"C:/image/1.gif";
  byte[] bytes = System.Text.ASCIIEncoding.ASCII.GetBytes(test);
  string base64String = System.Convert.ToBase64String(bytes);
  Console.WriteLine("Base 64 string: " + base64String);

उत्पादन

  QzovaW1hZ2UvMS5naWY=

आपको छवि स्रोत के रूप में आधार 64 नहीं रखना है। सामान्य रास्ता पर्याप्त होना चाहिए। आप किस समस्या का सामना कर रहे हैं?
एहसान

6
यह फ़ाइल नाम को छवि के बजाय बेस 64 में रूपांतरित करता है।
ओलिवियर जैकोट-डेसकॉम्बस

-3

ऐसा कुछ

 Function imgTo64(ByVal thePath As String) As String
    Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(thePath)
    Dim m As IO.MemoryStream = New IO.MemoryStream()

    img.Save(m, img.RawFormat)
    Dim imageBytes As Byte() = m.ToArray
    img.Dispose()

    Dim str64 = Convert.ToBase64String(imageBytes)
    Return str64
End Function

1
क्या आपने C#प्रश्न पर टैग देखा है ?
एडीसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.