Вам нужно подождать, пока ваше изображение загрузится, прежде чем вы сможете нарисовать его на холсте.
Для этого просто используйте обработчик события load
вашего элемента :
// create a new image
var img = new Image();
// declare a function to call once the image has loaded
img.onload = function(){
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var context = canvas.getContext('2d');
context.drawImage(img, 0,0);
var dataURL = canvas.toDataURL();
// now you can do something with the dataURL
doSomething(dataURL);
}
// now set the image's src
img.src = "http://somerandomWebsite/picture.png";
Кроме того, для холста 'context.toDataURL()
и context.getImageData
для работайте правильно, вы должны получить свой ресурс изображения в соответствии с кросс-оригинальным способом , в противном случае холст «испорчен», что означает, что любой метод получения данных с пикселями будет заблокирован.
img.crossOrigin
на "use-credentials"
. img.crossOrigin
на "anonymous"
. Nota Bene : Сервер CORS отправляется сервером, а атрибут cross-origin
сообщает, что вы хотите использовать CORS для получения данных изображения, и вы не сможете обойти его, если сервер установлен неправильно. Кроме того, некоторые UserAgents (IE & amp; Safari) до сих пор не реализовали этот атрибут.
Edge Case : Если некоторые из ваших изображений находятся на вашем сервере, а некоторые из них соответствуют требованиям CORS один, тогда вы можете захотеть использовать обработчик события onerror
, который должен срабатывать, если вы установите атрибут cross-origin
на "anonymous"
на сервере без CORS.
function corsError(){
this.crossOrigin='';
this.src='';
this.removeEventListener('error', corsError, false);
}
img.addEventListener('error', corsError, false);
Если вам нужно время сервера базы данных, вы можете сначала выполнить простой запрос hql, чтобы получить метку времени, а затем вычислить maxTimestamp в java и передать полученную метку времени и вычисленную метку maxTimeStamp в запрос, например один из ccclark.
Почему необходимо сделать это в запросе? Почему не только обрабатывают его в коде Java.
например:
From RandomThing
Where randomTime is not null and
randomTime >= :currentTimestamp and
randomTime <= :maxTimestamp
И затем просто установленный параметры.
Это должен быть HQL? Я, вероятно, переключился бы до быть в спящем режиме критерии и использование:
Criteria.add( Restrictions.SQLRestriction( "{alias} <= current_timestamp() " ) )
Criteria.add( Restrictions.SQLRestriction( "{alias} >= (current_timestamp() + ?) ", 5 )
Вы могли определить синтаксис, чтобы сделать это с помощью SQL в базе данных и затем определить функцию в пользовательском HibernateDialect. Например, нам была нужна будняя функция, которая не является стандартным SQL. Мы разделили диалект на подклассы для каждой базы данных и затем добавили строку как это:
registerFunction("weekday",
new SQLFunctionTemplate(Hibernate.INTEGER, "to_char(?1,'D')") );
В Вашем случае, Вы могли использовать функцию, вызванную date_diff, который мог бы быть определен как?-? в некоторых базах данных или чем-то другом в других. Тем путем Вы не должны писать необработанный SQL в своем запросе и если когда-нибудь необходимо переключать базы данных, Вы просто отображаете функцию по-другому на Вашем диалекте.