gpt4 book ai didi

php - 我提供的图片不正确吗,它们都显示为旋转了 90 度

转载 作者:可可西里 更新时间:2023-10-31 23:36:23 24 4
gpt4 key购买 nike

我曾经发现这段代码可以从我的服务器向客户端提供图像:

$filename = $_GET["filename"];
if ($filename == null || strlen($filename) < 1){
return null;
}

$fp = fopen($filename, 'rb');

// send the right headers
header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($filename));

// dump the picture and stop the script
fpassthru($fp);
exit;

当我通过浏览器运行这个 php 文件时(比如在浏览器的地址栏中调用这个脚本),肖像图像显示肖像。但是当我在 HTML 文件中运行它时(我动态设置了 img 元素的 src ),所有纵向图像都显示为横向(例如旋转 90 度)。

我应该在响应(-headers)中包含图像是横向还是纵向的内容?

这是我在 html 中加载图像的方式:

document.getElementById('next').src = "image.php?filename=" + data;

这是从我的 html 页面调用并且图像正确显示时请求的样子:

enter image description here

这是错误的版本 enter image description here

我可以看到 header 有所不同,但这有什么不同吗? (此外,我会在设置图像源时知道如何设置标题)

我还注意到的一件事是,在这两种情况下,当我右键单击并保存图像时,文件名为 image.jfi,我认为这是一个奇怪的扩展名?

最佳答案

方向是在 Exif 中设置的。图片没有物理旋转。图像查看器可以使用它,但标签中的浏览器不会旋转它。

您可以通过 imagemagick --auto-orient 在服务器上旋转图片 http://imagemagick.org/Usage/photos/#orient

您也可以“动态”旋转它。只需通过 exif_read_data() 获取 Exif 信息,如果它在 'Orientation' 中有 3(180degree)、6(90CW) 或 8(-90CCW),则旋转它p>

// dump the picture and stop the script
$source = imagecreatefromjpeg($filename);
$exif = exif_read_data($filename);
if (isset($exif['Orientation'])) {
switch($exif['Orientation']) {
case 3: // 180 degree
$rotate=imagerotate($source,180,0);
break;
case 6: // 90 CW
$rotate=imagerotate($source,-90,0);
break;
case 8: // 90 CCW
$rotate=imagerotate($source,90,0);
break;
default:
$rotate=imagerotate($source,0,0);
break;
}
imagejpeg($rotate);
imagedestroy($source);
imagedestroy($rotate);
} else {
imagejpeg($source);
imagedestroy($source);
}

当然最好一次性准备所有图片。

关于php - 我提供的图片不正确吗,它们都显示为旋转了 90 度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49083662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com