কোনও চিত্রকে (পথ দ্বারা নির্বাচিত) বেস 64 স্ট্রিতে রূপান্তর করুন


111

আপনি কীভাবে ব্যবহারকারীর কম্পিউটারের কোনও পাথ থেকে সি # তে একটি বেস 64 স্ট্রিংয়ে কোনও চিত্রকে রূপান্তর করবেন?

উদাহরণস্বরূপ, আমার কাছে ইমেজটির পথ রয়েছে (বিন্যাসে C:/image/1.gif) এবং ফিরে data:image/gif;base64,/9j/4AAQSkZJRgABAgEAYABgAAD..আসা 1.gifচিত্রটির প্রতিনিধিত্ব করার মতো একটি ডেটা ইউআরআই চাই would


আপনি যদি সেগুলি সিএসএসে এম্বেড করতে চলেছেন তবে গুলপ.জেএস এর মতো একটি বিল সিস্টেম কনফিগার করার বিষয়ে ভাবুন যা এই কাজটি আপনার পক্ষে পরিচালনা করতে পারে
কনস্ট্যান্টিন টার্কাস

2
আপনি কি চান যে পথের স্ট্রিংটি এনকোড করা হোক বা সেই জায়গায় চিত্রটি কোনও ইউআরআই দেবে?
মার্সেল

উত্তর:


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
এমনকি এটি পুনরুদ্ধার কেন বিরক্ত করবেন? আপনি কেবল ফাইলের বাইটগুলি পড়তে পারেন এবং সেগুলিতে রূপান্তর করতে পারেন।
নাইয়ারগডস

1
আমার ক্ষেত্রে এটি কারণ আমি চিত্রটি লোড হওয়ার পরে আকারটি পরিবর্তন করতে চেয়েছিলাম।
pgee70

@ নাইয়ারগুডস আমি মনে করি এটি এর কারণ এটির দ্বারা কাঁচা বিন্যাস হওয়া দরকার image.RawFormat
ফেসপাম 42

2
@ ফেসপালম 42 RawFormatকোনও চিত্র ফর্ম্যাট নির্দিষ্টকরণকারী নয়; এটি imageঅবজেক্টটির একটি সম্পত্তি , যা ফাইল থেকে পড়ার সময় চিত্রটি কোন ফর্ম্যাটটিতে ছিল তা ফিরিয়ে দেয় , অর্থাত্ এই ক্ষেত্রে এটি জিএফ ফর্ম্যাটটি ফিরিয়ে আনবে। সুতরাং এটি কিছুই পরিবর্তন করে না, আসল মূল ফাইলের বাইটগুলির পরিবর্তে আপনার কাছে। নেট ফ্রেমওয়ার্কের মাধ্যমে জিআইএফ-তে পুনরায় সেভ করা হিসাবে চিত্রটির বাইট রয়েছে।
নাইয়ারগডস

মনে রাখবেন যে কোনও কারণে। নেট প্যালেটযুক্ত চিত্র হিসাবে লোড হওয়া অ্যানিমেটেড জিআইএফগুলি দেখতে পাবে না (কেবলমাত্র অ্যানিমেটেড জিআইএফ-তে ঘটে থাকে, যদিও এটি কিছু ধরণের পিএনগির সাথেও ঘটে )) এবং পুনরায় সেভ করার সময় প্যালেটযুক্ত ফর্ম্যাটে "উচ্চ বর্ণের" চিত্রগুলি বলা হয়েছে , এটি একটি স্ট্যান্ডার্ড উইন্ডোজ 256-রঙের প্যালেট ব্যবহার করে। যেহেতু অ্যানিমেটেড জিআইএফগুলির মধ্যে সাধারণত একটি অপ্টিমাইজড প্যালেট থাকে, এর অর্থ এই প্রক্রিয়াটির মাধ্যমে সংরক্ষণ করা কোনও অ্যানিমেটেড জিআইএফ এর গুণমানটি মারাত্মকভাবে হ্রাস পাবে। সুতরাং এই সেটআপটি অবশ্যই আদর্শ নয়; কানসাইরোবটের উত্তরটি দেখায় মূল আসল বাইটগুলি পড়া আরও ভাল।
নাইয়ারগডস

104

byte[]চিত্রের বাইট অ্যারে ( ) উপস্থাপনা পান , তারপরে Convert.ToBase64String(), st ব্যবহার করুন । এটার মত:

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

একটি বেস 4 ইমেজটিকে আবার একটি সিস্টেমে রূপান্তর করতে ra

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

3
@ স্মিথ, আপনি যদি বেস 64 থেকে ফিরে রূপান্তর করতে চান তবে আপনি System.Drawing.Imagest ব্যবহার করতে পারেন। এর মতো:var img = Image.FromStream(new MemoryStream(Convert.FromBase64String(base64String)));
অ্যারিন গাজারিয়ান

27

যেহেতু আমাদের মধ্যে বেশিরভাগই অনন্যলাইনারদের পছন্দ করে:

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

আপনার যদি এটি বেস 64 বাইট অ্যারে হিসাবে প্রয়োজন:

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

আশা করি এটি সাহায্য করবে।


ইনপুটটি জিআইএফ হলে এটি সমস্যার সমাধান করতে পারে; এটি এটিকে একই ধরণের হিসাবে পুনঃ-সংরক্ষণ করে (যেমনটি আনা হয়েছিল _image.RawFormat) তবে মাইম প্রকার হিসাবে ডেটা প্রকাশ করেimage/jpg
নায়ারগডস

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

শীর্ষ ভোট দেওয়া উত্তরের ভিত্তিতে, সি # 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#প্রশ্নের ট্যাগ লক্ষ্য করেছেন ?
এডিসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.