linebender / linebender/resvg

Low image quality when downscaling

Offen
#653 11 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug
Vorherrschende Sprache
Rust
Sterne
4.1k
Forks
348
Ø Merge
1 T. 14 Std.
Gemergte PRs (30 T.)
3

Beschreibung

The use case is a PNG image which is base64-encoded and embedded in the SVG in an `` tag. In the attached example, the original image is 160x160, and scaled down to 49x49 in the SVG markup.
![emoji-49px-base64](https://github.com/RazrFalcon/resvg/assets/15127801/98fb643d-ce2e-4844-9a8a-1ff05d00cc1d)

The rendered image (resvg-rendered-49px.png) quality is degraded, especially on the curves.
![resvg-rendered-49px](https://github.com/RazrFalcon/resvg/assets/15127801/379e81b0-47cf-4f3c-be88-b67ae7ae469d)

When defining the dimensions as 160x160 in the SVG markup, the rendered image (resvg-rendered-160px.png) quality is great. And when including that image on an HTML page and re-scaling in the HTML markup, ``, the image quality remains crisp.
![resvg-rendered-160px](https://github.com/RazrFalcon/resvg/assets/15127801/c7d37682-fa93-4581-afcd-5f4329e20ba5)

We also tried setting the `image-rendering` attribute for `OptimizeQuality`, but the improvement was negligible.
https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering

Is is correct that Bicubic interpolation is being used? Do you have any guidance for improving image quality, and/or are there plans for other interpolation options?

Processing this same image with various interpolation filters in `ImageSharp` (e.g. Lanczos, MitchellNetravali, etc.) does produce a high quality result.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, den beigefügten Fall zu reproduzieren: ein 160x160 großes base64 PNG, das in ein SVG-Bild eingebettet und mit 49x49 gerendert wird, und vergleiche es anschließend mit dem in HTML skalierten 160x160-Rendern. Prüfe die Auswirkung von image-rendering="OptimizeQuality" und das Interpolationsverhalten. Als abgeschlossen gilt die Aufgabe, wenn das herunterskalierte SVG-Bild eine sichtbar verbesserte Kurvenqualität aufweist oder die Einschränkungen der unterstützten Interpolation dokumentiert sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
rust
Bereich
computer-graphics
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.