Höhere DPI-Grafiken mit HTML5-canvas
Gibt es eine Möglichkeit, um eine benutzerdefinierte DPI/PPI beim erstellen eines Abbilds mit dem HTML5 canvas-Element? Ich weiß, wie kann ich das zeichnen auf den canvas-Bereich, und exportieren Sie es als Bild, aber wie kann ich sicherstellen, dass der output-Bild ist von bestimmten DPI/PPI. Ich denke, mit SVG-elemnts zu ziehen auf der Leinwand ist eine Möglichkeit, aber wäre das nicht abgeflacht, wenn ich exportieren Sie die gesamte Leinwand wie ein Bild? Oder berechnen Sie das Gerät DPI und dann skalieren Sie das Bild, um mein DPI Anforderung, aber das scheint nicht die richtige Lösung.
InformationsquelleAutor redGREENblue | 2013-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht (pfui) Zugriff auf die DPI-Anzeige der aktuellen web-Seite in einem beliebigen browser:
Die Erkennung der system DPI/PPI von JS/CSS?
Für den Druck: Sie wahrscheinlich nicht den DPI-Wert der exportierten
<canvas>
Bild (PNG, JPEG) mit browser-standard-Funktionen. Jedoch, wenn Sie eine Reine Javascript-encoder Bild-encoder sind Sie frei, erstellen Sie jede Art von Binär-Datei, die Sie möchten, und manuelles einstellen der DPI-Wert embedded int er binäre.https://gist.github.com/1245476
Besser als eine ganze encoder für die PNG - /JPEG, nutzen Sie die nativen encoder, dann schreiben Sie die bytes in der Kopfzeile definieren, dass die pixel-Dichte von Metadaten. In PNG ist es die pHYs-chunk [injiziert werden muss durch die Umwandlung der Leinwand, um einen blob, und schneiden das Stück in], und im JPEG-es ist einfacher als Sie müssen nur umschreiben bits 13-16.
Diese Antwort ist nicht mehr korrekt.
window.devicePixelRatio
gibt Sie die DPI.href="https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio" >
window.devicePixelRatio
nicht die DPI, es gibt einen Wert, wie1
oder2
angibt, das Verhältnis der physikalischen Pixel in CSS-Pixel (D. H. für Retina-displays).DPI spielt keine Rolle, für Bilder, die Sie in Pixel gemessen werden. DPI/PPI ist rein willkürlich (ein 100x100 Bild ist 100x100 bei 72 DPI als auch 300 DPI).
InformationsquelleAutor Mikko Ohtamaa
Leinwände haben zwei unterschiedliche 'Größen': Ihre-DOM-Breite/Höhe und deren CSS Breite/Höhe. Sie können zu erhöhen eine Leinwand " Auflösung durch die Erhöhung der DOM-Größe, während die CSS Größe fixiert, und dann mit Hilfe der .scale () - Methode zu skalieren alle Ihre zukünftigen zieht, um das neue größere Größe. Hier ist ein Beispiel:
Canvas Standardauflösung ist 96 dpi (CSS Zoll, nicht basierend auf dem tatsächlichen Bildschirm). So einen scaleFactor von 2 gibt 192dpi, 3 288dpi, etc. In der Tat, hier ist eine version, die sollte Ihre gewünschte DPI:
Spaß haben! Beachten Sie, dass diese beiden code-Beispiele können nur einmal verwendet werden pro Leinwand, übernehmen Sie die aktuelle DOM-Größe ist das original (Sie können optimiert werden, um das zu ändern). Auch die Skalierung muss passieren vor Sie eine Zeichnung auf der Leinwand. Dank dieser Beitrag für die Methode und die Informationen!
Edit: Hier ist eine robustere Funktion, die scale-Zukunft zieht und pflegen bestehende canvas-Inhalte. Diese kann aufgerufen werden, um neu skalieren, mehrere Male.
"Sie könnten optimiert werden, um das zu ändern" - wie?
Hey @Zac, ich habe ein Beispiel, das mehrmals aufgerufen werden kann und wird bewahren, canvas-Inhalte.
InformationsquelleAutor Erik Koopmans
Wenn Sie nur wollen, um den dpi-Wert der PNG-Datei (also nicht die Steigerung der Anzahl der Pixel) werden dann mit dieser Bibliothek können Sie die pHYs chunk (unter anderem):
https://github.com/imaya/CanvasTool.PngEncoder
Minimal-Beispiel so exportieren Sie eine HTML5-Leinwand, um base64-kodierte PNG:
InformationsquelleAutor murkle