Как установить максимальную ширину холста по размеру экрана при сохранении соотношения сторон?

Я использую холст для загрузки изображения base64. В настоящее время он у меня есть, так что это будет полный размер загруженного изображения. Я хочу, чтобы холст сохранял соотношение сторон изображения, но не превышал максимальную ширину экрана iphone, на котором я его использую. Прямо сейчас гаснет с экрана при загрузке.

Вот мой код холста:

// imageData is a base64 encoded string
this.base64Image = "data:image/jpeg;base64," + imageData;

// Load image on canvas
const nativeCanvas: HTMLCanvasElement = this.cameraCanvas
    .nativeElement;
const ctx = nativeCanvas.getContext("2d");

var image = new Image();
image.onload = function() {
    nativeCanvas.height = image.height;
    nativeCanvas.width = image.width;
    ctx.drawImage(image, 0, 0);
};
image.src = this.base64Image;
console.info("Image: ", image);

Я использую это в приложении ionic-cordova.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
282
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно будет установить максимальную ширину, например: let maxW = 500. Это может быть ширина вашего iPhone. Затем вы можете рассчитать новую новую высоту изображения. Я надеюсь, что это то, о чем вы спрашивали.

image.onload = function() {
    nativeCanvas.width = maxW;
    nativeCanvas.height = (img.height * maxW)/img.width;
    ctx.drawImage(image, 0, 0, nativeCanvas.width, nativeCanvas.height);
};

Также вы можете использовать условное выражение, например if (img.width > maxW), для пересчета высоты холста, иначе сохраните размер холста = размер изображения.

Это помогло, но у меня проблема, когда изображение на самом деле не масштабируется, а обрезается только его часть.

Joe Scotto 17.12.2018 17:50

Вы меняли drawImage с ctx.drawImage(image, 0, 0); на ctx.drawImage(image, 0, 0, nativeCanvas.width, nativeCanvas.height);?

enxaneta 17.12.2018 18:14

Другие вопросы по теме