PHP — Corrigindo rotação de imagens tiradas via Celular
Olá Gente!
Vocês já devem ter tido um problema curioso, quando uma foto que foi tirada via celular é upada ela fica rotacionada (em alguns casos).
Isto ocorre porque o celular é virado, o que faz a imagem ser salva virada.
Quando isto ocorre, uma informação “Orientation” é armazenada nos meta dados da imagem.
Isto nos permite corrigir a rotação muito facilmente, para isto, iremos utilizar o “exif_read_data” para ler os dados da imagem, e o “imageflip” para rotacionar.
Para facilitar, temos uma função que já corrigi logo no Upload:
<?
function ImageFixOrientation_PrepImageUpload($FILE)
{
if( file_exists($FILE["tmp_name"]) )
{
$TmpDs["Extencao"] = explode(".", $FILE["name"]);
$TmpDs["Extencao"] = array_reverse($TmpDs["Extencao"]);
$TmpDs["Extencao"] = $TmpDs["Extencao"][0];
$TmpDs["Extencao"] = strtolower($TmpDs["Extencao"]);
if( $TmpDs["Extencao"] == "jpg" )
{
ImageFixOrientation_JPG($FILE["tmp_name"]);
$FILE["tmp_name"] = $FILE["tmp_name"];
$FILE["name"] = $FILE["name"];
$FILE["type"] = "image/jpeg";
}
}
return $FILE;
}
function ImageFixOrientation_JPG($filename)
{
$exif = exif_read_data($filename);
if (!empty($exif['Orientation']))
{
$image = imagecreatefromjpeg($filename);
switch ($exif['Orientation'])
{
case 1: // nothing
break;
case 2: // horizontal flip
imageflip($image, IMG_FLIP_HORIZONTAL);
break;
case 3: // 180 rotate left
$image = imagerotate($image, 180, 0);
break;
case 4: // vertical flip
imageflip($image, IMG_FLIP_VERTICAL);
break;
case 5: // vertical flip + 90 rotate right
imageflip($image, IMG_FLIP_VERTICAL);
$image = imagerotate($image, -90, 0);
break;
case 6: // 90 rotate right
$image = imagerotate($image, -90, 0);
break;
case 7: // horizontal flip + 90 rotate right
imageflip($image, IMG_FLIP_HORIZONTAL);
$image = imagerotate($image, -90, 0);
break;
case 8: // 90 rotate left
$image = imagerotate($image, 90, 0);
break;
}
imagejpeg($image, $filename, 100);
}
}
Bastando chamarmos a função “ImageFixOrientation_PrepImageUpload” indicando uma imagem enviada:
<?
ImageFixOrientation_PrepImageUpload($_FILE["MinhaImagem"]);Simples e resolve um probleminha chato logo no Upload.
É hora de dar tchau, pessoal! 👩💻
Até breve! 👋
Leia também
API Mágica: notificações Web Push no navegador com PHP
Web Push com a API Mágica em PHP puro: o navegador se inscreve, o seu site envia a notificação e a API conta o clique. Sem Composer e sem biblioteca.
IndexNow: avisando o Bing e o Yandex mais rápido
Como criar a chave do IndexNow e avisar Bing e Yandex das suas páginas novas com Node.js e PHP: as requisições, os erros reais e as armadilhas.
llms.txt: por que importa e como gerar em PHP
Por que o llms.txt importa para quem quer ser citado pela IA, e como gerar o seu em PHP puro lendo o sitemap.xml que voce ja tem.