it-roy-ru.com

Могу ли я получить изображение из элемента canvas и использовать его в теге img src?

Есть ли возможность преобразовать изображение, присутствующее в элементе canvas, в изображение, представленное img src?

Мне нужно это обрезать изображение после некоторого преобразования и сохранить его. В Интернете есть функции просмотра, такие как: FileReader() или ToBlop(), toDataURL(), getImageData(), но я понятия не имею, как правильно их реализовать и использовать в JavaScript.

Это мой 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>

В JavaScript это должно выглядеть примерно так:

$(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
}

Как я могу изменить элемент canvas в изображение img src в этом скрипте? (В этом скрипте могут быть ошибки)

53
kassprek

canvas.toDataURL() предоставит вам url данных , который можно использовать в качестве источника:

var image = new Image();
image.id = "pic"
image.src = canvas.toDataURL();
document.getElementById('image_for_crop').appendChild(image);

Смотрите также:

67
Zeta

Сделай это. Добавьте это в конец документа, прежде чем закрывать тег body.

<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>

Конечно, где-то в вашем документе вам нужен тег canvas, который он будет захватывать.

<canvas id="yourCanvasID" />
6
honkskillet

Я обнаружил две проблемы с вашей скрипкой, одна из них - первая в ответе Зетов.

метод не toDataUrl();, а toDataURL();, и вы забыли сохранить холст в своей переменной.

Так что теперь Fiddle работает нормально http://jsfiddle.net/gfyWK/12/

Надеюсь, это поможет!

2
limoragni

canvas.toDataURL не работает, если исходный URL изображения (относительный или абсолютный) не принадлежит тому же домену, что и веб-страница. Протестировано с помощью букмарклета и простого javascript на веб-странице, содержащей изображения. Посмотрите, как работает Дэвид Уолш пример . Поместите HTML и изображения на ваш собственный веб-сервер, переключите исходное изображение на относительный или абсолютный URL, измените URL внешнего изображения. Только первые два случая работают. 

1
skyrail

Исправлено Fiddle - обновлено показывает изображение, дублированное на холст ...

И правый клик может быть сохранен как .PNG

http://jsfiddle.net/gfyWK/67/

<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>

Плюс JS на странице скрипки ...

CheersSi 

В настоящее время глядя на сохранение этого файла в файл на сервере --- ASP.net C # (страница веб-формы .aspx) Любой совет будет круто ....

0
Si Simon