Ich weiß, dass dies bereits besprochen wurde und ich habe viele Artikel gelesen und versucht, was als funktionierend bezeichnet wurde, also verwerfen Sie meine Frage bitte nicht sofort.Laden von Bildern in Canvas (HTML/Javascript)
Ich versuche, verschiedene Bilder in eine Leinwand einheitlicher Größe zu laden. Es kann ein einzelnes Bild oder mehrere Bilder sein, aber ich verarbeite jeweils ein Bild.
Hier ist der Hauptcode (HTML/JS/PHP):
<?php
if ($record->photo != "") //make the first canvas
{
list($width, $height, $type) = getimagesize($record->photo);
echo "Width: " .$width. "<br />";
echo "Height: " .$height. "<br />";
?>
<canvas id="my_canvas" width="341" height = "256"></canvas>
<body>
<script type="text/javascript" src="common.js"></script>
<script type="text/javascript">
var img_src = "<?php echo $record->photo;?>";
var width = "<?php echo $width;?>";
var height = "<?php echo $height;?>";
make_canvas('my_canvas', img_src, width, height);
</script>
<?php
}//if 1
ähnlicher Block für canvas2, 3 usw. mit Schluss-Tag am Ende.
Hier sind Versionen der make_canvas() -Funktion, die "irgendwie" funktionieren. Das bedeutet, dass sie manchmal Bilder beim Laden rendern, aber möglicherweise beim Aktualisieren verbessern. Wenn mehr als ein Bild angezeigt werden soll, funktioniert es nie richtig.
Version 1 - inkonsistent und speichert das letzte Bild:
function make_canvas(id, src, width, height)
{
if (width > 341)
{
var new_width = 341;
var ratio = new_width/width;
var new_height = Math.round(height * ratio);
}
else
{
var new_width = width;
var new_height = height;
}
document.write("id: " + id + "<br />");
document.write("src: " + src + "<br />");
document.write("new_height: " + new_height + "<br />");
var canvas = document.getElementById(id),
context = canvas.getContext('2d');
base_image = new Image();
//base_image.src = '';
base_image.onload = function(){
context.drawImage(base_image,0,0,new_width, new_height);
}
base_image.src = src;
}
Version 2: Ein einzelnes Bild laden kann und das Caching auf Refresh
function make_canvas2(id, src, width, height)
{
if (width > 341)
{
var new_width = 341;
var ratio = new_width/width;
var new_height = Math.round(height * ratio);
}
else
{
var new_width = width;
var new_height = height;
}
document.write("id: " + id + "<br />");
document.write("src: " + src + "<br />");
document.write("new_height: " + new_height + "<br />");
var canvas = document.getElementById(id),
context = canvas.getContext('2d');
base_image = new Image();
base_image.src = '';
base_image.addEventListener("load", function() {
// execute drawImage statements here
context.drawImage(base_image,0,0,new_width, new_height);
}, false);
//base_image.onload = function(){ };
base_image.src = src;
}
versuchte ich base_image.complete in IF-Bedingung hinzugefügt Für die Onload- oder WHILE-Schleife innerhalb der Onload-Funktion könnte es jedoch niemals möglich sein, mehrere Bilder bei einer ersten Ladung korrekt anzuzeigen. Ich würde alle Arbeitsbeispiele schätzen, vorzugsweise ähnlich wie oben und ohne jQuery.
Blauharley, gespeichert Sie meine aus Tage der Frustration! Kleine Dinge (var) machen einen großen Unterschied, alles begann mit der Version 1 meines make_canvas() zu funktionieren (noch nicht Cross-Browser getestet). Und ja, dein Code tut, was ich brauche. Danke vielmals! – user2097141
Gern geschehen! Bitte markiere meine Antwort als richtig, damit es klar wird. Vielen Dank. – Blauharley