Laden...

Image in einen Stream umwanderln | ImageSharp

Erstellt von GotoDoWhileBoy vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.976 Views
G
GotoDoWhileBoy Themenstarter:in
4 Beiträge seit 2019
vor 4 Jahren
Image in einen Stream umwanderln | ImageSharp

Hey ich weiß nicht so recht wie ich ein Image von ImageSharp in einen Stream hinein packen kann und verzweifel da ein wenig dran. Aktuell suche ich eine Methode um das Image in ein Byte Array zu packen.


 public Stream Upload(IFormFile file)
        {
            using (var image = Image.Load(file.OpenReadStream()))
            {
                float multiplikator;
                int maxValueForImagelength = 135;
                int otherlength;
                if (image.Height > image.Width)
                {
                    multiplikator = image.Width / image.Height;
                    multiplikator = maxValueForImagelength * multiplikator;
                    otherlength = (int) multiplikator;
                    image.Mutate(c => c.Resize(otherlength, maxValueForImagelength));
                }
                else
                {
                    multiplikator = image.Height / image.Width;
                    multiplikator = maxValueForImagelength * multiplikator;
                    otherlength = (int)multiplikator;
                    image.Mutate(c => c.Resize(maxValueForImagelength, otherlength));
                }
                image.Save("jame.png");                
               // Stream stream = new MemoryStream(); <- Baustelle
               // return stream; 
            }
        }

Ich wäre über jede hilfe erfreut

16.806 Beiträge seit 2008
vor 4 Jahren

Hallo und Willkommen.

Du suchst hier im Forum nach Hilfe; daher wäre es auch toll, wenn Du Dich an [Hinweis] Wie poste ich richtig? halten und u.a. die Code Tags verwenden würdest.
Kein Helfer hier hat große Lust Deinen Plaintext Code zu lesen 👍

Aktuell suche ich eine Methode um das Image in ein Byte Array zu packen.

Ein Bild in ein Byte Array zu überführen ist quasi ein Alltagsproblem
Google-Suche nach c# image to byte array
Gleich der erste Treffer zeigt, wie Du den MemoryStream richtig nutzt.

Sollte es nicht das sein, was Du suchst, dann musst Du genauer sagen, was das Problem ist.

G
GotoDoWhileBoy Themenstarter:in
4 Beiträge seit 2019
vor 4 Jahren

Es gibt eine passende Überladung dafür: 
>

Da ich nicht System.Drawing verwende sehe ich da geringen erfolg. Aber ich schaue es mir an und versuche, daraus was abzuleiten.

Hallo und Willkommen.

Du suchst hier im Forum nach Hilfe; daher wäre es auch toll, wenn Du Dich an 
> halten und u.a. die Code Tags verwenden würdest.
Kein Helfer hier hat große Lust Deinen Plaintext Code zu lesen 😮

Ja hatte mich am anfang vertippt, weshalb das tag nicht richtig gesetzt war und ich es dann gelassen habe. Danke für den Link.

Aktuell suche ich eine Methode um das Image in ein Byte Array zu packen.

Ein Bild in ein Byte Array zu überführen ist quasi ein Alltagsproblem [url]Google-Suche nach c# image to byte array[/url]
Gleich der erste Treffer zeigt, wie Du den MemoryStream richtig nutzt.

Sollte es nicht das sein, was Du suchst, dann musst Du genauer sagen, was das Problem ist.

Das scheint aber für die System.drawing Bibliothek zu sein, Ich schaue es mir an und probiere rum aber ich glaube nicht, dass es für meinen Fall mir weiter hilft.

656 Beiträge seit 2008
vor 4 Jahren

Laut der ImageSharp Doku gibts auch ein image.Save(stream).
Was spricht dagegen, das zu nutzen?

G
GotoDoWhileBoy Themenstarter:in
4 Beiträge seit 2019
vor 4 Jahren

Laut
>
gibts auch ein image.Save(stream).
Was spricht dagegen, das zu nutzen?

klingt für mich erst mal eher wie das abspeichern für ein Bild.

und ich bin mir nicht so sicher, was mit outstream gemeint ist.

656 Beiträge seit 2008
vor 4 Jahren

Ein beliebiger Stream halt. Beispielsweise dein MemoryStream den du eingangs genannt hattest.

G
GotoDoWhileBoy Themenstarter:in
4 Beiträge seit 2019
vor 4 Jahren

Ein beliebiger Stream halt. Beispielsweise dein MemoryStream den du eingangs genannt hattest.

Danke

Ich möchte aber daraus kein Bild machen, sondern aus dem Bild das im Image gehalten wird, in einen Stream umwandeln um ihn an einer anderen stelle weiter zu verwenden.

memoryStream = image.save(memoryStream); 

<- Das ergibt für mich von der Syntax her wenig Sinn.

16.806 Beiträge seit 2008
vor 4 Jahren

Der Syntax ist auch falsch.

Man kann es 1:1 verwenden wie im ersten Link, den die Suche, die ich Dir gegeben habe, auflistet.


byte[] bytes;
using(var ms = new MemoryStream())
{
  image.Save(ms);
  bytes =  ms.ToArray();
}

Alternativ einfach in die Doku schauen, wie es funktioniert.
Da ist sogar ein Beispiel....aber wenn man sich das nicht anschaut.... 🤔

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;

using (Image image = Image.Load(inStream)) 
{
    // Create a deep copy of the given image, resize it, and return it for chaining.
   using (Image copy = image.Clone(x => x.Resize(image.Width / 2, image.Height / 2)))
   {
       copy.Save(outStream); 
   }
} // Dispose - releasing memory into a memory pool ready for the next image you wish to process.