Проблема: Когда я поворачиваю свое добавленное изображение, изображение не центрируется, как хотелось бы. Я продолжаю получать белую область над моей картиной внутри холста.Имея некоторые проблемы с вращением изображения внутри холста
Попробуйте изображение с соотношением сторон 16: 9, и вы увидите мою проблему после поворота. Это будет использоваться для мобильных устройств, поэтому ширина изображения может быть не более 640.
Here is a fiddle Текущий код:
HTML:
<div id="files">
<input type="file" id="imageLoader" name="imageLoader" />
</div>
<canvas id="imageCanvas"></canvas>
<canvas id="preview"></canvas>
<input type="button" id="saveButton" value="Save" />
<div id="rotate">
<button type="button" id="rotateLeft">Rotate -90°</button>
<button type="button" id="rotateRight">Rotate 90°</button>
</div>
JS:
var imageLoader = document.getElementById('imageLoader');
imageLoader.addEventListener('change', handleImage, false);
var image = "";
var canvas = document.getElementById('imageCanvas');
var ctx = canvas.getContext("2d");
var fileName = "";
var angleInDegrees = 0;
function handleImage(e) {
var reader = new FileReader();
reader.onload = function(event) {
var img = new Image();
img.onload = function() {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0,0);
fileName = img.name;
image = img;
};
img.src = event.target.result;
};
reader.readAsDataURL(e.target.files[0]);
}
function drawRotated(degrees) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
ctx.translate(canvas.width/2, canvas.height/2);
ctx.rotate(degrees * Math.PI/180);
ctx.drawImage(image, -image.width/2, -image.width/2);
ctx.restore();
}
$("#rotateRight").click(function() {
angleInDegrees += 90;
drawRotated(angleInDegrees);
});
$("#rotateLeft").click(function() {
angleInDegrees -= 90;
drawRotated(angleInDegrees);
});
Вот мой ne w скрипка :) Что, если я хочу, чтобы она была максимальной шириной 640?
jsfiddle.net/dJ5BH Вот моя новая скрипка :) Что делать, если я хочу, чтобы это было не более 640 ширина? – sindrem
Вы можете использовать ctx.scale, чтобы уменьшить любое изображение, чтобы оно соответствовало желаемой максимальной ширине (ширина 640 пикселей). Вот пример скрипки: http://jsfiddle.net/m1erickson/pYqTg/ – markE
Спасибо! :) Где вы находите эти скрипки ?! – sindrem