У меня есть сайт, на котором пользователи могут загружать фотографии с мобильных устройств, но все фотографии, загруженные с мобильных телефонов, показывают 90 градусов влево при загрузке. Живой сайт www.uneraportoj.com
, У меня сейчас проблема exeif, но я пытался использовать плагин, но не работает. Любая помощь рекомендуется.
Поделиться кодом скрипта:
<?php
include_once('help.php');
if(isset($_POST['submit'])){
$title = $_POST['title'];
$content = $_POST['content'];
$posted = $_POST['posted'];
$date = date("Y-m-d H:i:s");
$ip = $_SERVER["REMOTE_ADDR"];
$rand = rand(1,1000000);
if(empty($title)){
echo "Titulli eshte bosh.";
}else if(empty($content)){
echo "Permbajtja eshte bosh.";
}else if(empty($_FILES['image']['name'])){
echo "Imazhi eshte bosh.";
}else if (
($_FILES['image']['type'] == 'image/gif')
|| ($_FILES['image']['type'] == 'image/jpeg')
|| ($_FILES['image']['type'] == 'image/pjpeg')
|| ($_FILES['image']['type'] == 'image/png')
&& ($_FILES['image']['size'] < 200000)
){
$part = $rand.'_'.$_FILES['image']['name'];
if ($_FILES["image"]["error"] > 0) {
echo "return code" . $_FILES['image']['error'];
//Code from plugin start
if($_FILES['image']){
// If the image is jpg and has orientation data, make sure we orientate correctly before uploading
if($image->exif('Orientation'))
$image = orientate($image, $image->exif('Orientation'));
}
}else if(move_uploaded_file($_FILES['image']['tmp_name'],'images/'. $part.'')){
if(empty($posted)){
$posted = 'Anonim';
}
$sql = "INSERT INTO ***(title, content, date, image, posted, ip) VALUES (:title, :content, :date, :image, :posted, :ip)";
$query = $db->prepare($sql);
$results = $query->execute(array(
':title' => htmlentities ($title),
':content' => htmlentities ($content),
':date' => $date,
':image' => $part,
':posted' => htmlentities ($posted),
':ip' => $ip
));
echo "<div id='ok'>Lajmi u raportua me sukses. Kontrollojeni <a href='index.php'>ketu</a> .</div>";
}
}else{
echo "<div id='ok'>Imazhi nuk eshte i sakte. (Vetem jpg/png)</div>";
}
}
?>
Код плагина:
<?php /**
* Orientate an image, based on its exif rotation state
*
* @param Intervention\Image\Image $image
* @param integer $orientation Image exif orientation
* @return Intervention\Image\Image
*/
$image = $_FILES['image'];
function orientate($image, $orientation)
{
switch ($orientation) {
// 888888
// 88
// 8888
// 88
// 88
case 1:
return $image;
// 888888
// 88
// 8888
// 88
// 88
case 2:
return $image->flip('h');
// 88
// 88
// 8888
// 88
// 888888
case 3:
return $image->rotate(180);
// 88
// 88
// 8888
// 88
// 888888
case 4:
return $image->rotate(180)->flip('h');
// 8888888888
// 88 88
// 88
case 5:
return $image->rotate(-90)->flip('h');
// 88
// 88 88
// 8888888888
case 6:
return $image->rotate(-90);
// 88
// 88 88
// 8888888888
case 7:
return $image->rotate(-90)->flip('v');
// 8888888888
// 88 88
// 88
case 8:
return $image->rotate(90);
default:
return $image;
}
}
?>
Я обнаружил, что это видео на YouTube очень полезно для ориентации изображения с данными exif.
проверить это
https://www.youtube.com/watch?v=HjHSgGFqAtE
print 'exif orientation';
$original_filename = 'car1.jpg';
$exif_data = exif_read_data($original_filename);
// displays exif data
// print '<pre>';
// print_r($exif_data);
// print '<pre>';
$orientation = orientation($exif_data);
$degrees = orientation_flag($orientation);
print '<pre>';
print_r($orientation);
print '</pre>';
print '<pre>';
print_r($degrees);
print '</pre>';
$image_data = imagecreatefromjpeg($original_filename);
$image_rotate = imagerotate($image_data, $degrees, 0);
$rotated_filename = 'rotated_' . $original_filename;
imagejpeg($image_rotate, $rotated_filename);
imagedestroy($image_data);
imagedestroy($image_rotate);
// finds orientation value in exif data
function orientation($exif_data) {
// search array for orientation
foreach($exif_data as $key => $val) {
// print '<pre>';
// print_r($key);
// print '<pre>';
if(strtolower($key) == 'orientation') {
return $val;
}
}
}
// gets orientation data and returns degrees needed for rotation
function orientation_flag($orientation) {
switch($orientation):
case 1:
return 0;
case 8:
return 90;
case 3:
return 180;
case 6:
return 270;
endswitch;
}
?>
<img src="car1.jpg" width="400"/>
<br>
<img src="rotated_car1.jpg" width="400"/>
У вас есть вызов функции в операторе if (error), то есть он будет вращаться только в случае ошибки. Поместите его после того, как ваше изображение прошло проверку на ошибки, и вы переместили его в конечное местоположение.
if ($_FILES["image"]["error"] > 0) {
echo "return code" . $_FILES['image']['error'];
}else if(move_uploaded_file($_FILES['image']{'tmp_name'],'images/'. $part.'')){
if(file_exists('images/'. $part.'')){
/* read exif data (returns it as an array) */
$exif_read = exif_read_data('images/'. $part.'');
/* if exif contains orientation property (some images don't) */
if(!empty($exif_read['Orientation'])){
$orientation_data = $exif_read['Orientation'];
$image = orientate($image, $Orientation_data);
}
Редактировать:
Я скопировал и вставил точный код, который я использую для загрузки изображений. За то, что я делаю, мне нужно беспокоиться только об ориентации 3, 6 и 8, но вы можете добавить остальные, если считаете, что они вам понадобятся. Используйте функцию PHP imageflip () после imagerotate () (прочитайте, как это использовать Вот)
<?php
require("../db_credentials.php");
if($_FILES['file']['name']){
$name = htmlspecialchars($_FILES['file']['name']);
$ext = end((explode(".", $name)));
$ext = strtolower($ext);
//if no errors...
if(!$_FILES['file']['error']){
//now is the time to modify the future file name and validate the file
$new_file_name = date('ymdHisu'). ".". $ext;
if($_FILES['file']['size'] > (6144000)){
$valid_file = false;
echo 'Oops! Your file\'s size is to large.';
}
elseif($ext !== "jpg" && $ext !== "png" && $ext !== "jpeg" && $ext != "gif" && $ext !== "bmp") {
$valid_file = false;
echo "Your file must be in jpg, jpeg, png, gif, or bmp formats.";
}
else{
$valid_file = true;
}
//if the file has passed the test
if($valid_file){
//move it to where we want it to be
move_uploaded_file($_FILES['file']['tmp_name'], 'images/'.$new_file_name);
$exif_read = exif_read_data("images/".$new_file_name);
if(!empty($exif_read['Orientation'])){
$orientation_data = exif_read_data("images/".$new_file_name)['Orientation'];
}
if(isset($orientation_data) && $orientation_data !== 1){
$path = "../images/". $new_file_name;
$buffer = ImageCreateFromJPEG($path);
$exif = exif_read_data($path);
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, $path, 90);
}
}
}
}
//if there is an error...
else
{
//set that to be the returned message
echo 'Ooops! Your upload triggered the following error: '.$_FILES['file']['error'];
}
}
?>