gpt4 book ai didi

javascript - jQuery 图像预览 exif 旋转问题

转载 作者:数据小太阳 更新时间:2023-10-29 05:49:51 25 4
gpt4 key购买 nike

我正在使用这个 jQuery 函数在上传之前显示图像。图片是从移动设备上传的,exif 方向有问题。该函数只是将预览图片的src换成实际文件图片的base64编码。

在服务器端 (php),我正在使用一个函数来更正上传时的 exif 旋转。

我可以在 jQuery 中制作与我的 PHP 代码类似的东西吗?这样我就可以在上传之前以正确的旋转显示图像?

Javascript

function readURL(input) {

if (input.files && input.files[0]) {
var reader = new FileReader();

reader.onload = function (e) {
$('#blah').attr('src', e.target.result);
}

reader.readAsDataURL(input.files[0]);
}
}

$("#imgInp").change(function(){
readURL(this);
});

PHP

function image_fix_orientation($filename) {
$exif = exif_read_data($filename);
if (!empty($exif['Orientation'])) {
$image = imagecreatefromjpeg($filename);
switch ($exif['Orientation']) {
case 3:
$image = imagerotate($image, 180, 0);
break;

case 6:
$image = imagerotate($image, -90, 0);
break;

case 8:
$image = imagerotate($image, 90, 0);
break;
}

imagejpeg($image, $filename, 100);
}
}

最佳答案

是的,当然。要预览图像,您正在正确使用 FileReader API。但您还必须检查 EXIF 标志并修复方向。您可以使用 https://raw.githubusercontent.com/jseidelin/exif-js/master/exif.js

然后像这样检查标志:

function fixExifOrientation($img) {
$img.on('load', function() {
EXIF.getData($img[0], function() {
console.log('Exif=', EXIF.getTag(this, "Orientation"));
switch(parseInt(EXIF.getTag(this, "Orientation"))) {
case 2:
$img.addClass('flip'); break;
case 3:
$img.addClass('rotate-180'); break;
case 4:
$img.addClass('flip-and-rotate-180'); break;
case 5:
$img.addClass('flip-and-rotate-270'); break;
case 6:
$img.addClass('rotate-90'); break;
case 7:
$img.addClass('flip-and-rotate-90'); break;
case 8:
$img.addClass('rotate-270'); break;
}
});
});
}

我更喜欢使用 CSS 变换来旋转图像。这是实现:

.rotate-90 {
-moz-transform: rotate(90deg);
-webkit-transform: rotate(90deg);
-o-transform: rotate(90deg);
transform: rotate(90deg);
}

.rotate-180 {
-moz-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}

.rotate-270 {
-moz-transform: rotate(270deg);
-webkit-transform: rotate(270deg);
-o-transform: rotate(270deg);
transform: rotate(270deg);
}

.flip {
-moz-transform: scaleX(-1);
-webkit-transform: scaleX(-1);
-o-transform: scaleX(-1);
transform: scaleX(-1);
}

.flip-and-rotate-90 {
-moz-transform: rotate(90deg) scaleX(-1);
-webkit-transform: rotate(90deg) scaleX(-1);
-o-transform: rotate(90deg) scaleX(-1);
transform: rotate(90deg) scaleX(-1);
}

.flip-and-rotate-180 {
-moz-transform: rotate(180deg) scaleX(-1);
-webkit-transform: rotate(180deg) scaleX(-1);
-o-transform: rotate(180deg) scaleX(-1);
transform: rotate(180deg) scaleX(-1);
}

.flip-and-rotate-270 {
-moz-transform: rotate(270deg) scaleX(-1);
-webkit-transform: rotate(270deg) scaleX(-1);
-o-transform: rotate(270deg) scaleX(-1);
transform: rotate(270deg) scaleX(-1);
}

关于javascript - jQuery 图像预览 exif 旋转问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28251338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com