| |

VB.NET - FortgeschritteneRe: JPG verkleinern | |  | Autor: modellskipper | Datum: 09.05.06 11:47 |
| Hat sich erledigt, hier das Ergebnis, falls es jemanden interessiert.
Noch einmal zum Hintergrund ... ich stand vor der Aufgabe JPG-Bilder zu verkleinern.
Eine Alternative wäre die Image.GetThumbnailImage-Methode gewesen, die liefert aber nur bis zum einer gewissen Bildgröße eine annehmbare Qualität. Wird eine maximale Kantenlänge von 120 px überschritten, ist es fast nicht mehr brauchbar. Interessant an der Geschichte, für kleine Bildchen funktioniert es recht gut, schnell und es wird sogar einigermaßen vernüftig interpoliert (Antialiasing). Das war's dann aber schon. Für größere Abmessungen ab einer Kantenlänge von 250 px, wie schon erwähnt, nicht brauchbar
Die nachfolgenden Codezeilen erzeugen wirklich Spitzen-Ergebnisse und das sogar recht schnell. Es eignet sich für jede gewünschte Größe, proportionale Berechnung ist gleich mit eingebaut. Man kann ja zusätzlich noch ein bisschen mit der Kompressionsrate und den InterpolationMode spielen.
Alles in allem überzeugt dieses kleine Progrämmchen.
Wer's gebrauchen kann, viel Spaß.
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
Module resize
Sub main()
Dim Quelldatei As String = "bild.jpg" 'Dateiname des Herkunftsbildes
Dim Zieldatei As String = "bild_1.jpg" 'Dateiname des zu
' konvertierenden Bildes
Dim Kantenlänge As Integer = 250 'die maximale Kantenlänge der
' neuen Bildes
Dim Qualität As Long = 80 'die Kompressionsrate 100 =
' keine, 1 = maximale Kompression
' ImageCodecInfo-Objekt erstellen, das dem JPEG-Codec entspricht.
Dim JpegCodec As ImageCodecInfo = GetEncoderInfo("image/jpeg")
' Array erstellen, das alle Encoding-Parameter beinhaltet,
' in diesem Fall beinhaltet es nur den Quality-Parameter.
Dim Kompression As New EncoderParameters(1)
Kompression.Param(0) = New EncoderParameter(Encoder.Quality, Qualität)
'das Originalbild laden
Dim Originalbild As Image = Originalbild.FromFile(Quelldatei, True)
'proportionale Berechnung des neuen Bildes
Dim ResampleBreite As Integer
Dim ResampleHöhe As Integer
If Originalbild.Width > Originalbild.Height Then
ResampleBreite = Kantenlänge
ResampleHöhe = CInt((Kantenlänge / Originalbild.Width) * _
Originalbild.Height)
Else
ResampleHöhe = Kantenlänge
ResampleBreite = CInt((Kantenlänge / Originalbild.Height) * _
Originalbild.Width)
End If
'ein neues Bitmap-Objekt mit den errechneten Maßen erstellen
Dim KonvertiertesBild As New Bitmap(ResampleBreite, ResampleHöhe)
'ein neues Grafikobjekt erstellen
Dim Grafik As Graphics = Graphics.FromImage(KonvertiertesBild)
'die Qualität des Resamplings festlegen
Grafik.InterpolationMode = InterpolationMode.High
'das neue Bild zeichnen
Grafik.DrawImage(Originalbild, 0, 0, ResampleBreite, ResampleHöhe)
'das konvertierte Bild speichern
KonvertiertesBild.Save(Zieldatei, JpegCodec, Kompression)
End
End Sub
Private Function GetEncoderInfo(ByVal mimeType As String) As ImageCodecInfo
Dim i As Integer
Dim Encoders() As ImageCodecInfo = ImageCodecInfo.GetImageEncoders()
For i = 0 To Encoders.Length - 1
If Encoders(i).MimeType = mimeType Then
Return Encoders(i)
End If
Next
Return Nothing
End Function
End Module |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevOutBar 4.0 
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|