图像获取有关上传
我想上传一个base64编码的图像和解码之后保存自动旋转。图像上传和保存,我可以访问它使用的URL和一切..但图像逆时针旋转90度,我不知道为什么!图像获取有关上传
从哪里获得的编码数据也好,把它在<img />
的地方工作正常!
function saveImageData($base64Data) {
$base64_decoded = base64_decode($base64Data);
$im = imagecreatefromstring($base64_decoded);
if ($im !== false) {
$imagepath = '/public/uploads/' . time() . '.jpg';
imagejpeg($im, $imagepath);
chmod($imagepath, 0755);
imagedestroy($im);
} else {
return false;
}
return $imagepath;
}
我没有使用任何旋转功能,但仍然旋转。我可以使用PHP的GD函数一样imagerotate,但不希望像黑色的背景等
如果你能help..you r为awesomest人的原因!
我的猜测是,你要上传的图像实际上是旋转,但被纠正,因为它包含了EXIF部分旋转数据。 (例如,相机在拍摄照片时可能会知道纵向方向,并将该信息保存在EXIF数据中;某些查看软件会知道旋转数据,并在查看照片时自动旋转照片。)在这种情况下,图片可能只是出现为你旋转,这取决于你用什么来查看它。
是否使用相同的软件查看“上传之前”和“上传后”的图像?如果你看到他们都使用同一个网络浏览器会发生什么情况呢?
,如果你从不同的来源尝试不同的形象,最好是会发生什么?你有任何软件可以让你查看图像的EXIF数据吗?寻找“方向”价值;除了“1”以外的任何东西都意味着图像有一个旋转设置(请参阅this page以获得体面的描述)。
因此,总之,我想说JPEG文件中的底层图像是“错误的“方向,并且EXIF数据包含纠正该旋转以进行显示的信息。例如,如果来源是刚刚与我一起玩过的iPhone似乎以横向方向存储其底层图像数据,但是如果实际拍摄图像(因此应该显示该图像)则设置EXIF数据)作为肖像。解决它
最好的办法是几乎可以肯定检查EXIF数据在上传后的文件,使用PHP EXIF functions和旋转图像需要保存自己的副本之前,纠正方向。
感谢您的洞察!我实际上是从iPhone/iPod Touch相机拍摄照片或从iOS相册中选择。基本上,我使用Phonegap构建iOS应用程序(http://phonegap.com) 我会检查这个EXIF方向的东西,然后回去..也许这可能是它! – detj 2011-03-14 18:36:31
这里的PhoneGap的文档(http://docs.phonegap.com/phonegap_camera_camera.md.html#Camera),那我下面进入正base64编码的图像数据 – detj 2011-03-14 18:41:20
@detj是的,如果它是一个图像从iPhone,我认为我的理论很可能是对的。例如,我只用iPhone拍摄了两张照片,一张横向照片,一张纵向照片。虽然它们在iPhoto中看起来都具有“正确”的方向,例如,这些图片本身都是* 2048 *宽* 1536 *高*,甚至是“肖像”照片。纵向照片实际上存储为横向,EXIF数据表示它已旋转,因此iPhoto会自动更正。我猜这张照片是通过_unchanged_到达您的网站的,但展示的只是原始的,未旋转的图像。 – 2011-03-14 23:45:04
我在制作移动混合应用程序时遇到此问题,该应用程序使用Cordova访问手机相机并将图像发布到服务器。我通过将correctOrientation属性设置为true来解决它。
navigator.camera.getPicture(onSuccess, onFail,
{
quality: 80,
destinationType:Camera.DestinationType.DATA_URL,
correctOrientation : true
});
<?php
if (isset($_POST['submit'])) {
$filename = $_FILES['file']['name'];
$filePath = $_FILES['file']['tmp_name'];
$exif = exif_read_data($_FILES['file']['tmp_name']);
echo "<pre>";
print_r($exif);
echo "</pre>";
if (!empty($exif['Orientation'])) {
$imageResource = imagecreatefromjpeg($filePath);
switch ($exif['Orientation']) {
case 3:
$image = imagerotate($imageResource, 180, 0);
break;
case 6:
$image = imagerotate($imageResource, -90, 0);
break;
case 8:
$image = imagerotate($imageResource, 90, 0);
break;
default:
$image = $imageResource;
}
imagejpeg($image, $filename, 90);
}
}
?>
<form class="form-horizontal" method="post" enctype="multipart/form-data">
<div class="form-group">
<div class="col-md-9">
<div class="input-group">
<span class="input-group-btn">
<span class="btn btn-default btn-file">
Choose img<input type="file" name="file" id="imgInp">
</span>
</span>
</div>
</div>
</div>
<button name="submit" type="submit">Send</button>
</form>
我知道这是旧的,但只是想我会提到:如果你能帮助它,不要上传之前base64encode照片。你增加了20%的大小。 PhoneGap支持文件上传http://docs.phonegap.com/en/1.9.0/cordova_file_file.md.html#FileTransfer – 2012-07-03 00:31:33
当时,我写这篇文章的时候,Phonegap不是Codorva,只是Nitobi的Phonegap和API都没有。 t支持多部分POST请求。 此外,我们决定放弃Phonegap&原生! – detj 2012-07-03 18:34:33
我遇到与移动网络应用相同的问题。任何想法为什么? – Orane 2015-05-20 00:42:31