ASP.NET Web API C # Ответ HttpRequest с изображением через Json [дубликат]

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

65
задан aliboy38 13 February 2015 в 12:08
поделиться

10 ответов

Попробуйте

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;
    }
}
116
ответ дан Hakam Fostok 19 August 2018 в 03:46
поделиться
  • 1
    Зачем даже беспокоиться о его сохранении? вы можете просто прочитать байты файла и преобразовать их. – Nyerguds 1 February 2018 в 13:43
  • 2
    В моем случае это было потому, что я хотел изменить размер изображения после его загрузки. – pgee70 12 March 2018 в 07:22

Вы можете преобразовать его так:

  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=
-1
ответ дан Ehsan 19 August 2018 в 03:46
поделиться
  • 1
    сэр спасибо, еще один вопрос сэр, как я могу объявить это как мой источник изображения моего тега изображения, например, & lt; img src = & quot; data: image / gif; base64, ... & quot; & gt; & gt; – A.J 24 January 2014 в 08:52
  • 2
    я добавляю строку 64base в свой src, например & lt; input type = & quot; image & quot; SRC = & Quot; данные: изображения / GIF; base64, QzovTWVkaWFcMS5naWY = & Quot; класс = & Quot; picContent & Quot; & GT; – A.J 24 January 2014 в 08:54
  • 3
    вам не нужно класть базу 64 в качестве источника изображения. нормального пути должно быть достаточно. В чем проблема, с которой вы столкнулись? – Ehsan 24 January 2014 в 09:06
  • 4
    Это преобразует имя файла в base64 вместо самого изображения. – Olivier Jacot-Descombes 24 August 2016 в 16:20

Это класс, который я написал для этой цели:

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();
4
ответ дан Jeremy Bell 19 August 2018 в 03:46
поделиться

Таким образом, это проще, когда вы передаете изображение, а затем передаете формат.

private static string ImageToBase64(Image image)
{
    try
    {
        var imageStream = new MemoryStream();
        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!";
    }
}
1
ответ дан Milo 19 August 2018 в 03:46
поделиться

Вы можете использовать путь Server.Map для предоставления относительного пути, а затем вы можете либо создать изображение с помощью преобразования base64, либо просто добавить строку base64 в image src.

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

string base64ImageRepresentation = Convert.ToBase64String(imageArray);
0
ответ дан nikunjM 19 August 2018 в 03:46
поделиться

Поскольку большинство из нас любят oneliners:

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

Если вам это нужно как массив байтов Base64:

Encoding.ASCII.GetBytes(Convert.ToBase64String(File.ReadAllBytes(imageFilepath)));
11
ответ дан Ogglas 19 August 2018 в 03:46
поделиться

Что-то вроде этого

 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
ответ дан Pao Xu 19 August 2018 в 03:46
поделиться

Получить представление байтового массива (byte[]) изображения, затем использовать Convert.ToBase64String(), st. например:

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)));
58
ответ дан Stefan Mohr 19 August 2018 в 03:46
поделиться
  • 1
    @Smith, если вы имеете в виду преобразование назад из base64 в System.Drawing.Image, вы можете использовать st. например: var img = Image.FromStream(new MemoryStream(Convert.FromBase64String(base64String))); – Arin Ghazarian 28 June 2014 в 04:10
  • 2
    Спасибо, это сработало для меня. – GTCrais 27 October 2016 в 19:24
0
ответ дан KansaiRobot 30 October 2018 в 15:34
поделиться
1
ответ дан sumith madhushan 30 October 2018 в 15:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: