может ли код обнаружить экран DPI?
К сожалению, нет никакого способа определить реальный физический размер пикселя и, следовательно, размер дисплея и DPI. Хотя вы можете иметь список известных устройств / экранов / разрешений и спрашивать у клиента, какое оборудование у них есть, но у него столько же проблем, сколько и разных устройств.
Можно ли сделать расчет, чтобы показать эффективный размер печати?
Поскольку это связано с первым вопросом, ответ отрицательный.
Интересно, есть ли умный способ: с JQuery или HTML5 читать «отброшенные» размеры изображения, вычислять DPI и отображать относительный размер изображения в холсте HTML5?
Чтобы получить разрешение (не DPI) изображения, вы просто загрузите его
var image = new Image();
image.src = /*dropped image URL*/
image.onload = function(){ // need to wait till it has loaded
width = image.width; // number of pixels across
height = image.height; // number of pixels down.
}
DPI только привязан к разрешению. Вы не можете увеличить разрешение изображения. Это приведет к размытию изображения. Изображение в его отбрасываемой форме находится на максимальном DPI, который он когда-либо будет. НЕ ОБНАРУЖИТЕ изображение перед загрузкой каким-либо образом. (Если он слишком большой)
Изображение, отображаемое на холсте, не является тем, что вы загружаете. В фрагменте над изображением можно сделать любое разрешение.
Скажем, ваш холст 1024 на 1024, а загруженное изображение - 4096 на 2048. Вам нужно показать изображение на холсте с низким разрешением, равномерно масштабируя его, а затем отринув его в этом масштабе. Предоставление его на холст не влияет на изображение, оно по-прежнему сохраняет свое первоначальное разрешение.
Чтобы получить правильную шкалу, чтобы показать все изображение
var scale = Math.min(image.width / canvas.width, image.height / canvas.height);
// to display the image on the canvas
ctx.drawImage(image,0,0,image.width * scale,image.height * scale);
Когда работа с изображениями на компьютерах забывается о DPI, это бессмысленно, поскольку у вас нет способа узнать, насколько велика точка (пиксель). DPI - это функция принтера.
Вы можете, когда клиент выбрал размер печати, даст эффективный DPI (я предпочитаю PPI (пиксели на дюйм)), который является числом пикселей, разделяющим размер печати в дюймах. Например, разумное изображение 5184 на 3456 пикселей при печати 7 "на 5" даст DPI ~ 740DPI, но если вы измените размер печати 16 "на 12", DPI станет ~ 432DPI. Все, что изменилось, это размер печати, изображение не изменилось вообще.