Bạn sẽ không thể vẽ hình ảnh trực tiếp từ một máy chủ khác vào một khung vẽ và sau đó sử dụng getImageData
. Đây là một vấn đề bảo mật và khung vẽ sẽ được coi là "vô vị".
Bạn có thể lưu một bản sao của hình ảnh vào máy chủ của mình bằng PHP và sau đó chỉ cần tải hình ảnh mới không? Ví dụ: bạn có thể gửi URL tới tập lệnh PHP và lưu nó vào máy chủ của bạn, sau đó trả lại tên tệp mới cho javascript của bạn như thế này:
<?php //The name of this file in this example is imgdata.php
$url=$_GET['url'];
// prevent hackers from uploading PHP scripts and pwning your system
if(!@is_array(getimagesize($url))){
echo "path/to/placeholderImage.png";
exit("wrong file type.");
}
$img = file_get_contents($url);
$fn = substr(strrchr($url, "/"), 1);
file_put_contents($fn,$img);
echo $fn;
?>
Bạn sẽ sử dụng tập lệnh PHP với một số javascript ajax như thế này:
xi=new XMLHttpRequest();
xi.open("GET","imgdata.php?url="+yourImageURL,true);
xi.send();
xi.onreadystatechange=function() {
if(xi.readyState==4 && xi.status==200) {
img=new Image;
img.onload=function(){
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
}
img.src=xi.responseText;
}
}
Nếu bạn sử dụng getImageData
trên khung vẽ sau đó, nó sẽ hoạt động tốt.
Ngoài ra, nếu bạn không muốn lưu toàn bộ hình ảnh, bạn có thể chuyển tọa độ x & y cho tập lệnh PHP của mình và tính giá trị rgba của pixel ở bên đó. Tôi nghĩ rằng có những thư viện tốt để thực hiện kiểu xử lý ảnh đó trong PHP.
Nếu bạn muốn sử dụng phương pháp này, hãy cho tôi biết nếu bạn cần trợ giúp thực hiện nó.
chỉnh sửa-1: peeps chỉ ra rằng tập lệnh php bị lộ và cho phép internet có khả năng sử dụng nó một cách độc hại. có một triệu cách để xử lý việc này, một trong những cách đơn giản nhất là một số cách xáo trộn URL ... tôi nghĩ rằng các thực hành php an toàn xứng đáng có một google riêng; P
chỉnh sửa-2: theo yêu cầu phổ biến, tôi đã thêm một kiểm tra để đảm bảo đó là hình ảnh chứ không phải tập lệnh php (từ: PHP kiểm tra xem tệp có phải là hình ảnh không ).