fabric.js Größe Leinwand auf den Bildschirm passt

Ich bin derzeit auf der Entwicklung einer Anwendung auf einem mobilen Gerät (android und iPhone) mit ionic und cordova. Ich möchte ein Bild zu Bearbeiten. Ich benutze fabric.js Bibliothek zu tun. Fabric.js konvertiert ein Bild und andere Gegenstände in die Leinwand. Dann füge ich ein Bild auf die Leinwand (Aufkleber) und exportieren Sie es als Bild(dataURL). Also die Größe der Leinwand ist wirklich wichtig, denn es ist ein Qualitäts-Faktor (exportieren eines Bilds, basierend auf kleinen Leinwand wird das Ergebnis in schlechter Qualität). Die Leinwand hat eine Größe von 607*1080 pixel (je nach Gerät, nahm das Foto). Ich möchte, um es zu passen in den Bildschirm, ohne Qualität zu verlieren (wie unten erklärt wird, kann ich nicht die Größe der Leinwand, ohne Qualität zu verlieren).

Versuchte ich 3 Ideen, aber niemand hat gearbeitet.

  1. Resize canvas : Ergebnis in Qualität verloren (Bild exportiert werden canvas Größe)
  2. Anpassen viewport : cordova nicht erlaubt zu ändern, den viewport auf dem mobilen Gerät. Es ist ein workaround, aber es wird brechen mein design (sehr kleine navbar kleiner", ...)
  3. Verwenden CSS3-zoom-Eigenschaften : Es funktioniert wie ein Charme auf dem desktop, aber es ist ein event-mapping-problem auf einem mobilen Gerät (ich habe nicht versucht, auf ios aber das problem passiert auf android Webview). Event-mapping ist nicht gezoomt. Die Leinwand wird heraus gezoomt, aber es ist unmöglich für die Interaktion mit canvas-Elemente. Wenn ein canvas-element (Aufkleber) befindet sich bei x:100 y:100, wenn ich den zoom-Eigenschaft auf 0,5, wird das element Lage bei (50,50) und nicht mehr bei (100,100). Gibt es eine Möglichkeit das zu korrigieren das event-mapping je nach zoom-Eigenschaft der android webview?

Ich weiß nicht, ob es andere Möglichkeiten gibt, das zu tun, aber ich bin stucked mit diesem Problem seit 3 Tagen und ich habe verbringen viel Zeit in Foren, fabricjs doc und google und ich keine funktionierende Lösung oder etwas anderes, dass mir helfen kann.

EDIT: Es gibt 2 funktionierende Lösung unten. Check meine Antwort, um zu sehen, wie man das mit css.

  • Ich Laufe in ähnliche Probleme mal vor. Ich denke, Sie sollten kopieren fabric.js Berechnungen die Berechnungen für die Ereignisse.....
  • viele Male ist es einfach besser, auf code, den eigenen Weg, als zu versuchen, zu verwenden, verpackt Bibliotheken überhaupt
  • Ich habe keine Zeit zu schreiben eine lib, implementieren alle functionnalities enthalten fabris.js. Ich benutze eine Menge von functionnalities dieser Bibliothek, und es würde zu viel Zeit, um alles neu von Grund auf.
  • Würden Sie probabily Ende schreiben, eine Bibliothek und dann entscheiden, es zu teilen mit Menschen. Und jemand wird noch die Frage über die Bibliothek.
InformationsquelleAutor X4V1 | 2015-06-16
Schreibe einen Kommentar