Ich habe ein Skript geschrieben, um die Gr??e hochgeladener Bilder lokal stapelweise zu ?ndern und Miniaturansichten zu erstellen. Das Problem besteht darin, dass einige Bilder vertikal ausgerichtet sind, sich aber nach der Gr??en?nderung horizontal drehen.
Dies wird durch die Exif-Ausrichtung des Bildes verursacht. Gibt es eine einfache M?glichkeit, Orientierungs-Exifs über PHP aus einem Bild zu entfernen? Ich wei?, dass Imagick das kann, aber ich kann/will es nicht installieren.
Gibt es eine L?sung ohne?
Jetzt l?se ich dieses Problem, indem ich ein solches Bild in einem Bildeditor ?ffne und es erneut speichere, ohne die Exif-Informationen beizubehalten. Wenn ich anschlie?end die Gr??e eines solchen Bildes im Skript ?ndere, ist das Ergebnis korrekt.
Also m?chte ich einfach Exif aus dem Bild im PHP-Skript entfernen, bevor ich die Gr??e ?ndere.
Ich habe eine Funktion ausprobiert, die das Richtungs-Exif überprüft:
function removeExif($filename) { if (function_exists('exif_read_data')) { $exif = exif_read_data($filename); if($exif && isset($exif['Orientation'])) { $orientation = $exif['Orientation']; if($orientation != 1){ // $img = new Imagick($filename); // $img->stripImage(); // $img->writeImage($filename); } } } }
Also muss ich nur den Imagick-Teil durch etwas anderes ersetzen, ohne zus?tzliche Bibliotheken zu installieren, vielleicht mit dem bereits enthaltenen GD oder so.
好吧,所以我決定旋轉(zhuǎn)圖像而不是刪除 exif,結(jié)果具有相同的效果。因此,我檢查 exif 方向值(如果有)是多少,然后根據(jù)該值,我只需使用 imagerotate,然后調(diào)整圖像大小。結(jié)果是完美的,不需要額外的安裝和庫(kù)。
function checkExif($filename) { if (function_exists('exif_read_data')) { $exif = exif_read_data($filename); if($exif && isset($exif['Orientation'])) { $orientation = $exif['Orientation']; if ($exif['Orientation']==3 OR $exif['Orientation']==6 OR $exif['Orientation']==8) { $imageResource = imagecreatefromjpeg($filename); 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; } imagejpeg($image, $filename); imagedestroy($imageResource); imagedestroy($image); } } } }