Ich entwickle gerade eine Anwendung auf einem mobilen Gerät (Android und iPhone) mit ionic und cordova. Ich möchte ein Bild bearbeiten. Ich benutze die fabric.js-Bibliothek, um das zu tun. Fabric.js konvertiert ein Bild und andere Elemente in Canvas. Dann füge ich ein Bild auf die Leinwand (Aufkleber) und exportiere es als Bild (dataURL). Daher ist die Größe der Leinwand sehr wichtig, da es sich um einen Qualitätsfaktor handelt (ein Bild, das auf einer kleinen Leinwand basiert, führt zu schlechter Qualität). Die Leinwandgröße beträgt etwa 607 * 1080 Pixel (abhängig von dem Gerät, das das Foto aufgenommen hat). Ich möchte es auf dem Bildschirm ohne Qualitätsverlust anpassen (wie unten erklärt, kann ich die Leinwand nicht ändern, ohne Qualität zu verlieren).
Ich habe versucht, drei Ideen, aber niemand hat funktioniert.
Ich weiß nicht, ob es andere Möglichkeiten gibt, das zu tun, aber ich bin seit drei Tagen mit diesem Problem beschäftigt und habe viel Zeit in Foren, fabricjs doc und google verbracht und finde keine Arbeitslösung oder etwas anderes, das mir helfen kann.
EDIT: Es gibt 2 funktionierende Lösung unten. Überprüfen Sie meine Antwort, um zu sehen, wie man das mit CSS macht.
css:
%Vor%Profis:
Die gesamte Auflösung ergibt sich aus Breite und Höhe des Arbeitsbereichs (800/600)
Nachteile:
Passen Sie gut für quadratische Canvases Seitenverhältnis (1: 1), Probleme mit der Ausgabe Für seltsame Seitenverhältnisse, wo Sie Ihre CSS-Höhe berechnen müssen basiert,
%Vor%das ist nicht in meiner Liga in CSS ...
Lesen Sie vor einiger Zeit auf der Seite fabric.js git issues wo, technique (css resize) wird aufgrund von Langsamkeit und falschen Objekten nicht empfohlen Transaktionen, dies kann geändert werden Ich weiß, ich habe getestet und Objekte waren falsche Größe (zufällige farbige Pixel, Transaktionsschatten bleiben erhalten) in Leinwand, mit anderen Worten eine Unordnung)
Ändern Sie die Größe der Leinwand auf die Größe des Fensters (Responsive-Leinwand). Wenn Sie in eine exakte Größe exportieren möchten, müssen Sie die Leinwand auf die exakte Pixelauflösung skalieren oder eine andere Leinwand erstellen.
Dieses Beispiel bezieht sich auf 1: 1-Ration-Canvas (Sie müssen das Seitenverhältnis auf Canvas und Objekte im Inneren anwenden):
%Vor%Beim Senden von Export-Canvas-Daten Größe der Leinwand auf die gewünschte Auflösung umstellen, voila:
%Vor%Es ist keine große Sache mit den Rationen anders als 1: 1 müssen Sie auch Multiplayer-Maßstab für Höhe berechnen, leicht verständliches Verhältnis: Ссылка
Tags und Links javascript android cordova canvas fabricjs