Gibt es die Möglichkeit, das in einem Canvas-Element vorhandene Bild in ein durch img src
dargestelltes Bild zu konvertieren?
Ich brauche das, um ein Bild nach einer Transformation zu beschneiden und zu speichern. Es gibt eine Ansichtsfunktion, die ich im Internet gefunden habe, wie zum Beispiel: FileReader()
oder ToBlop()
, toDataURL()
, getImageData()
, aber ich habe keine Ahnung, wie ich sie richtig implementieren und verwenden soll JavaScript.
Das ist mein HTML:
<img src="http://picture.jpg" id="picture" style="display:none"/>
<tr>
<td>
<canvas id="transform_image"></canvas>
</td>
</tr>
<tr>
<td>
<div id="image_for_crop">image from canvas</div>
</td>
</tr>
In JavaScript sollte es ungefähr so aussehen:
$(document).ready(function() {
img = document.getElementById('picture');
canvas = document.getElementById('transform_image');
if(!canvas || !canvas.getContext){
canvas.parentNode.removeChild(canvas);
} else {
img.style.position = 'absolute';
}
transformImg(90);
ShowImg(imgFile);
}
function transformImg(degree) {
if (document.getElementById('transform_image')) {
var Context = canvas.getContext('2d');
var cx = 0, cy = 0;
var picture = $('#picture');
var displayedImg = {
width: picture.width(),
height: picture.height()
};
var cw = displayedImg.width, ch = displayedImg.height
Context.rotate(degree * Math.PI / 180);
Context.drawImage(img, cx, cy, cw, ch);
}
}
function showImg(imgFile) {
if (!imgFile.type.match(/image.*/))
return;
var img = document.createElement("img"); // creat img object
img.id = "pic"; //I need set some id
img.src = imgFile; // my picture representing by src
document.getElementById('image_for_crop').appendChild(img); //my image for crop
}
Wie kann ich das Canvas-Element in diesem Skript in ein img src
-Bild ändern? (Dieses Skript enthält möglicherweise einige Fehler.)
canvas.toDataURL()
liefert Ihnen eine Daten-URL , die als Quelle verwendet werden kann:
var image = new Image();
image.id = "pic"
image.src = canvas.toDataURL();
document.getElementById('image_for_crop').appendChild(image);
Siehe auch:
Mach das. Fügen Sie dies am unteren Rand Ihres Dokuments hinzu, bevor Sie das body-Tag schließen.
<script>
function canvasToImg() {
var canvas = document.getElementById("yourCanvasID");
var ctx=canvas.getContext("2d");
//draw a red box
ctx.fillStyle="#FF0000";
ctx.fillRect(10,10,30,30);
var url = canvas.toDataURL();
var newImg = document.createElement("img"); // create img tag
newImg.src = url;
document.body.appendChild(newImg); // add to end of your document
}
canvasToImg(); //execute the function
</script>
Natürlich brauchen Sie irgendwo in Ihrem Dokument den Canvas-Tag, den es packen wird.
<canvas id="yourCanvasID" />
Ich habe zwei Probleme mit Ihrer Fiddle gefunden, eines der Probleme steht an erster Stelle in Zetas Antwort.
die Methode ist nicht toDataUrl();
ist toDataURL();
und Sie haben vergessen, die Zeichenfläche in Ihrer Variablen zu speichern.
Die Fiddle funktioniert nun gut http://jsfiddle.net/gfyWK/12/
Ich hoffe das hilft!
canvas.toDataURL
funktioniert nicht, wenn die ursprüngliche Bild-URL (entweder relativ oder absolut) nicht zu derselben Domäne gehört wie die Webseite. Getestet von einem Bookmarklet und einem einfachen Javascript in der Webseite mit den Bildern . Schauen Sie sich David Walsh an, der Beispiel arbeitet. Legen Sie die HTML-Datei und die Bilder auf Ihrem eigenen Webserver ab, ändern Sie das Originalbild in eine relative oder absolute URL, und ändern Sie es in eine externe Bild-URL. Nur die ersten beiden Fälle funktionieren.
Korrektur der Fiddle - aktualisiert zeigt das in den Canvas kopierte Bild ...
Ein Rechtsklick kann als .PNG gespeichert werden
<div style="text-align:center">
<img src="http://imgon.net/di-M7Z9.jpg" id="picture" style="display:none;" />
<br />
<div id="for_jcrop">here the image should apear</div>
<canvas id="rotate" style="border:5px double black; margin-top:5px; "></canvas>
</div>
Plus die JS auf der Geigenseite ...
ProstSi
Momentan beim Speichern dieser Datei auf dem Server --- ASP.net C # (.aspx-Webformularseite) Jeder Hinweis wäre cool.