Nano Hash - криптовалюты, майнинг, программирование

Как получить удаленное изображение для отображения на холсте?

Как я могу получить изображения с сервера?

У меня есть этот фрагмент кода, который позволяет мне рисовать изображения на холсте.

<html>
  <head>
    <script type="text/javascript">
      function draw(){
        var canvas = document.getElementById('canv');
        var ctx = canvas.getContext('2d');

        for (i=0;i<document.images.length;i++){
          ctx.drawImage(document.images[i],i*150,i*130);
        }
    }
    </script>
  </head>
  <body onload="draw();">
    <canvas id="canv" width="1024" height="1024"></canvas>
    <img src="http://www.google.com/intl/en_ALL/images/logo.gif">
    <img src="http://l.yimg.com/a/i/ww/beta/y3.gif">
    <img src="http://static.ak.fbcdn.net/images/welcome/welcome_page_map.png">
  </body>
</html>

Вместо того, чтобы зацикливаться на document.images, я хотел бы постоянно получать изображения с сервера.

for (;;) {
    /* how to fetch myimage??? */
    myimage = fetch???('http://myserver/nextimage.cgi');
    ctx.drawImage(myimage, x, y);
}
02.10.2008

Ответы:


1

Используйте встроенный объект JavaScript Image.

Вот очень простой пример использования объекта Image:

myimage = new Image();
myimage.src = 'http://myserver/nextimage.cgi';

Вот более подходящий механизм для вашего сценария из комментариев к этому ответу.

Спасибо, olliej!

Стоит отметить, что вы не можете синхронно запрашивать ресурс, поэтому вы должны сделать что-то вроде:

myimage = new Image();
myimage.onload = function() {
                     ctx.drawImage(myimage, x, y);
                 }
myimage.src = 'http://myserver/nextimage.cgi';
02.10.2008
  • Стоит отметить, что вы не можете синхронно запрашивать ресурс, поэтому вы должны сделать что-то вроде myimage.onload = function() { ctx.drawImage(myimage, x, y); } myimage.src = 'myserver/nextimage.cgi'; 03.10.2008

  • 2

    Если вы хотите нарисовать изображение на холсте, вам также нужно дождаться загрузки изображения, поэтому правильно будет сделать следующее:

    myimage = new Image();
    myimage.onload = function() {
        context.drawImage(myimage, ...);
    }
    myimage.src = 'http://myserver/nextimage.cgi';
    
    03.10.2008

    3

    Чтобы добавить изображение в JavaScript, вы можете сделать следующее:

    myimage = new Image()
    myimage.src='http://....'
    

    Если изображение на вашей странице имеет идентификатор «image1», вы можете назначить источник изображения image1 для myimage.src.

    02.10.2008

    4

    Я обнаружил, что использование прототипов здесь очень полезно. Если вы не знакомы с ними, прототипы являются частью объектов, которые позволяют вам устанавливать для них свои собственные переменные и/или методы.

    Делать что-то вроде:

    Image.prototype.position = {
        x: 0,
        y: 0
    }
    
    Image.prototype.onload = function(){
        context.drawImage(this, this.position.x, this.position.y);
    }
    

    позволяет вам установить положение и рисовать на холсте без особых усилий.

    Переменная position позволяет перемещать его по холсту.
    Таким образом, можно сделать следующее:

    var myImg = new Image();
    myImg.position.x = 20;
    myImg.position.y = 200;
    myImg.src = "http://www.google.com/intl/en_ALL/images/logo.gif";
    

    и изображение автоматически отобразится на холсте в точке (20 200).

    Prototype работает для всех объектов HTML и собственного Javascript. Так

    Array.prototype.sum = function(){
        var _sum = 0.0;
        for (var i=0; i<this.length; i++){
            _sum += parseFloat(this[i]);
        }
        return _sum;
    }
    

    дает новую функцию всем массивам.

    Однако,

    var Bob;
    Bob.Prototype.sayHi = function(){
        alert("Hello there.");
    }
    

    не будет работать (по многим причинам, но я буду говорить только о прототипах).
    Прототип — это своего рода «свойство», которое содержит все ваши свойства/методы, которые вы вводите, и уже есть в каждом HTML-коде. и собственные объекты Javascript (не те, которые вы создаете).
    Прототипы также позволяют легко вызывать (вы можете использовать "myImg.position.x" вместо "myImg.prototype.position.x" ).

    Кроме того, если вы определяете свою переменную, вы должны делать это примерно так.

    var Bob = function(){
        this.sayHi = function(){
            alert("Hello there.");
        }
    }
    
    09.03.2012

    5

    Если вы используете jQuery, вы можете сделать:

    $.('<img src="http://myserver/nextimage.cgi" />').appendTo('#canv');
    

    Вы также можете добавить ширину и все остальное в тег img.

    02.10.2008
  • Canvas не отображает дочерние элементы, это программируемый контекст растрового изображения, который вы можете рисовать с помощью JS, одной из функций API является drawImage(), которая берет элемент/объект изображения и рисует его в буфере. Это позволяет вам делать отличные вещи, которые раньше были невозможны, например. canvaspaint.org 03.10.2008
  • Теперь, когда я понял вопрос, я бы дал другой ответ. :) 06.10.2008
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..