Bild laden und Auflösung ändern

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Bild laden und Auflösung ändern

    Hallo ich bin neu hier und auch im Bereich Visual Basic.
    Ich habe ein Online Shop, mit huinderten von Artikelnbildern, alle sind 300dpi gross und über 3MB, dies ist für Mein Server Inssgesammt zuviel.
    In PHP habe ich leider keine lösung gefunnden, und ich konnte mich schwach errinnern das es in Visual Basic 6, sowas ähnliches gab.
    So hab ich mich an Visual Basic 2015 Community , und hab schon den anfang das ich bilder auswählen kann, in eine Listbox einlesen und in einem vorschaufenster angezeigt wird.
    Nun das eigentliche Problem, wie kann ich das geladene Bild so bearbeiten das die auflösung auf 96dpi heruntergestuft wird, sowie die Breite und Länge des Bildes angepasst werden kann ?
    Ich danke im Vorraus

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @DoctorWho Breite und Höhe geht so:

    VB.NET-Quellcode

    1. Dim newWidth = 64
    2. Dim newHeight = 64
    3. Dim ori = New Bitmap("C:\Temp\Img.png")
    4. Using bmp = New Bitmap(newWidth, newHeight)
    5. Dim g = Graphics.FromImage(bmp)
    6. g.DrawImage(ori, 0, 0, newWidth, newHeight)
    7. bmp.Save("C:\Temp\ImgSmall.png", Imaging.ImageFormat.Png)
    8. End Using
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @ErfinderDesRades Jou.

    DoctorWho schrieb:

    die Auflösung von zB 300 dpi in 96 dpi
    Sicher kann man das ändern, da gibt es Tagas für im Bild. Doch was hat das für einen Zweck? Bei der Darstellung im Programm (Screen, Print) kannst Du dem Bild sagen, wie viele Pixel in x und y es verwenden soll.
    Worin sollen sich denn Deine Bilder in der Handhabung unterscheiden?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ganz einfach die bilder sind 300dpi gross und ca. 3,2 MB gross, alle bilder die ich habe von den artilkeln habe ergeben 23gb 15 gb habe ich auf dem server zur verfügung , deswegen das runterskalieren

    DoctorWho schrieb:

    3,2 MB gross
    Also ändere den Pixelsize, wie ich Dir es in Post #2 geschrieben habe.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @DoctorWho
    Mit folgender Funktion könntest du deine Bilder an eine bestimmte Größe annähernd anpassen...
    FitOnPicture

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Drawing.Imaging
    4. Public Class Form1
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Dim result = FitOnPicture(New Bitmap("F:\Test\Test.bmp"), 100000)
    7. result.Save("F:\Test\Test_.bmp", ImageFormat.Bmp)
    8. End Sub
    9. Private Function FitOnPicture(pic As Bitmap, picsize As Integer) As Bitmap
    10. Dim trend As Integer = 0
    11. Dim f = 1.0R
    12. Dim tmpPic As Bitmap = Nothing
    13. Dim compact As Action(Of Bitmap) = Sub()
    14. Dim w = CInt(pic.Width * f)
    15. Dim h = CInt(pic.Height * f)
    16. Using bmp = New Bitmap(w, h)
    17. Dim g = Graphics.FromImage(bmp)
    18. g.DrawImage(pic, 0, 0, w, h)
    19. Using srm As New MemoryStream
    20. bmp.Save(srm, ImageFormat.Bmp)
    21. If srm.Length < picsize Then
    22. trend += 1
    23. f += 0.01
    24. compact(bmp)
    25. Else
    26. If trend > 0 Then tmpPic = CType(bmp.Clone(), Bitmap) : Return
    27. trend = -1
    28. f /= 2
    29. compact(bmp)
    30. End If
    31. End Using
    32. End Using
    33. End Sub
    34. compact(pic)
    35. Return tmpPic
    36. End Function
    37. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()