在iOS图像旋转输入捕获
问题描述:
我挣扎着我的PHP形式。我想通过输入捕捉功能上传图像。但是在iOS设备上捕获img后,图像会旋转。我发现了大量关于exif的文章,但是notihing为我工作。因此,我在下面粘贴我的代码,并且希望寻求帮助,以便如何将代码旋转到代码的其余部分。 (我不知道该怎么做。)Thx兄弟寻求帮助。或者也许有任何建议? 代码来实现:在iOS图像旋转输入捕获
fileReader.onloadend = function() {
var exif = EXIF.readFromBinaryFile(new BinaryFile(this.result));
switch(exif.Orientation){
case 8:
ctx.rotate(90*Math.PI/180);
break;
case 3:
ctx.rotate(180*Math.PI/180);
break;
case 6:
ctx.rotate(-90*Math.PI/180);
break;
}};
休息:
if (isset($_POST['submit'])) {
if (empty($_POST['title']) or empty($_POST['shop']) or empty($_FILES['image']) or empty($_POST['price'])) {
echo "All fields must be filled";
}
else {
$userID = $_POST['userID'];
$title = $_POST['title'];
$price = $_POST['price'];
$price_before = $_POST['price_before'];
$town = $_POST['town'];
$shop = $_POST['shop'];
if(empty($_POST['price_before'])){
$price_before = null;
}
if(empty($_POST['cut'])){
$pcut = null;
}
if (isset($_FILES['image'])) {
$errors = array();
$file_name = $_FILES['image']['name'];
$file_size = $_FILES['image']['size'];
$file_tmp = $_FILES['image']['tmp_name'];
$file_type = $_FILES['image']['type'];
$file_ext = strtolower(end(explode('.', $_FILES['image']['name'])));
$expensions = array("jpeg", "jpg", "png");
if (in_array($file_ext, $expensions) === false) {
$errors[] = "extension not allowed, please choose a JPEG or PNG file.";
}
if ($file_size > 8097152) {
$errors[] = 'File size must be less than 8 MB';
}
if (empty($errors) == true) {
session_start();
$hour = date("H");
$min = date("i");
$sec = date("s");
$day = date("d");
$month = date("m");
$year = date("Y");
$url = "../pic/".$file_name.".".$file_ext;
$file_name = md5(uniqid());
move_uploaded_file($file_tmp, "../pic/".$file_name.".".$file_ext);
$upload = "INSERT INTO item (userID, title, price, price_before, town, shop, img_name, img_ext, hour, min, sec, day, month, year) VALUES ('$userID', '$title', '$price',' $price_before', '$town', '$shop', '$file_name', '$file_ext', '$hour', '$min', '$sec', '$day', '$month', '$year')";
$result = $conn -> query($upload);
echo '<div style=width:100%;height:100%;display:flex;margin:0;>
<div style=width:auto;height:auto%;vertical-align:middle;margin:auto;><div class="cssload-spin-box"></div></div></div>';
header('Refresh: 2; URL = ../index.php');
} else {
print_r($errors);
}
}
}
}
答
我面临同样的问题。所以这里是UIImage
扩展名。
extension UIImage {
/// (Additional method to fix the image orientation issue on b/w server and client)
public func fixOrientation() -> UIImage {
if self.imageOrientation == UIImageOrientation.Up {
return self
}
var transform = CGAffineTransformIdentity
switch self.imageOrientation {
case .Down, .DownMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height)
transform = CGAffineTransformRotate(transform, CGFloat(M_PI));
case .Left, .LeftMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, 0);
transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2));
case .Right, .RightMirrored:
transform = CGAffineTransformTranslate(transform, 0, self.size.height);
transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2));
case .Up, .UpMirrored:
break
}
switch self.imageOrientation {
case .UpMirrored, .DownMirrored:
transform = CGAffineTransformTranslate(transform, self.size.width, 0)
transform = CGAffineTransformScale(transform, -1, 1)
case .LeftMirrored, .RightMirrored:
transform = CGAffineTransformTranslate(transform, self.size.height, 0)
transform = CGAffineTransformScale(transform, -1, 1);
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
let ctx = CGBitmapContextCreate(
nil,
Int(self.size.width),
Int(self.size.height),
CGImageGetBitsPerComponent(self.CGImage),
0,
CGImageGetColorSpace(self.CGImage),
UInt32(CGImageGetBitmapInfo(self.CGImage).rawValue)
)
CGContextConcatCTM(ctx, transform);
switch self.imageOrientation {
case .Left, .LeftMirrored, .Right, .RightMirrored:
// Grr...
CGContextDrawImage(ctx, CGRectMake(0, 0, self.size.height,self.size.width), self.CGImage);
default:
CGContextDrawImage(ctx, CGRectMake(0, 0, self.size.width,self.size.height), self.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
let cgimg = CGBitmapContextCreateImage(ctx)
let img = UIImage(CGImage: cgimg!)
return img;
}
}
现在修复图像方向将其发送到服务器
let imageToUpload = originalImage.fixOrientation()
注意前:因为它拥有定向属性,则不要删除EXIF数据。
答
我做了一个巨大的研究网络和此代码finaly完美工作。基本上我必须将img保存到目录中,然后打开dir并执行这个魔术。这是我想如何解决iOS定位相机问题最简单的方法。
$buffer = ImageCreateFromJPEG($url); //url is path to image
$exif [email protected]_read_data($url);
if(!empty($exif['Orientation'])){
switch($exif['Orientation']){
case 8:
$buffer = imagerotate($buffer,90,0);
break;
case 3:
$buffer = imagerotate($buffer,180,0);
break;
case 6:
$buffer = imagerotate($buffer,-90,0);
break;
}
}
imagejpeg($buffer, $url, 90);
谢谢,它似乎是有用的,但请你能告诉我如何实现它吗?我不是这样的亲。 –
@IgorMiniMinarič这是快速的语言代码,将在iOS端实现。但我想你正在寻求PHP代码。对不起哥哥。 – TheTiger