Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP或Perl正确旋转JPEG图像_Php_Perl_Jpeg_Rotation_Exif - Fatal编程技术网

使用PHP或Perl正确旋转JPEG图像

使用PHP或Perl正确旋转JPEG图像,php,perl,jpeg,rotation,exif,Php,Perl,Jpeg,Rotation,Exif,我使用Ubuntu上的F-Spot来旋转一些照片JPEG文件,然后将它们上传到我的网站上。这似乎很管用。但是,如果在web浏览器中打开这些图像,则它们不会显示为旋转图像。如果我把它们下载到WindowsVista机器上,并在那里用任何标准程序打开它们,它们也不会这样做。我怀疑F-Spot是通过修改exif数据或类似内容来旋转图像的,而不是通过实际旋转图像 因此,我需要一个在我的web服务器上运行的小函数,即PHP或Perl,它将接受一组文件路径,检查图像,并旋转需要旋转的图像,覆盖原始文件 我懂

我使用Ubuntu上的F-Spot来旋转一些照片JPEG文件,然后将它们上传到我的网站上。这似乎很管用。但是,如果在web浏览器中打开这些图像,则它们不会显示为旋转图像。如果我把它们下载到WindowsVista机器上,并在那里用任何标准程序打开它们,它们也不会这样做。我怀疑F-Spot是通过修改exif数据或类似内容来旋转图像的,而不是通过实际旋转图像

因此,我需要一个在我的web服务器上运行的小函数,即PHP或Perl,它将接受一组文件路径,检查图像,并旋转需要旋转的图像,覆盖原始文件

我懂一些PHP,但不懂Perl


在寻找这个问题是否已经被提出的过程中,我遇到了一些想法。经过一些尝试和错误之后,我可能能够使用glob、exif_read_data和imagerotate将一些东西组合在一起。我明天试试。但是现在我要睡觉了。

在Perl中,您可以使用模块旋转图像。还有一个,还有一个命令行界面。如果只是旋转一些图像,最好使用命令行版本

下面是一个简单的Perl脚本,用于顺时针旋转图像并保留文件的修改时间:

use strict;
use warnings;
use Image::Magick;

die "no filename specified!\n" if not @ARGV;

foreach my $filename (@ARGV)
{
    print "Processing: $filename\n";

    # Get the file's last modified time for restoring later
    my $mtime = (stat $filename)[9];

    my $image = Image::Magick->new;
    my $result = $image->Read($filename);
    warn "$result" if $result;
    $result = $image->Rotate(degrees => 90.0);
    warn "$result" if $result;
    $result = $image->Write($filename);
    warn "$result" if $result;

    # Restore the mtime
    utime time, $mtime, $filename;
}

直接从PHP网站复制:

此示例将图像旋转180 度-倒置


在Perl中,我认为您需要。PHP等价物似乎可以通过访问。

请注意:您的结束语会导致人们希望结束您的问题,因为它不再相关,并且可能会阻碍回答,因此您下次可能希望忽略此内容:只需使用ImageMagick附带的命令行转换实用程序来旋转图像并将其上载到站点,而不是编写服务器端解决方案。请注意,提供的两个答案都会在每次访问时旋转图像。如果每次访问图像时都用旋转图像替换原始文件,效果会很有趣。澄清一下:感谢旋转图像方面的帮助。不过,我真正需要帮助的是检查图像,找出哪些图像需要旋转。我真的想要一个服务器端的解决方案,因为我的笔记本电脑花了两天的时间上传所有这些图片,我不想再这样做了。很明显,图像中有一些标志,告诉F-Spot显示旋转的图像。如何找到该标志并仅旋转具有该标志的图像?我会在exif数据中查找它,但是函数exif_read_data的php手册看起来不太乐观。不,我在exif数据中看不到任何相关内容。您不需要存储所有不需要的统计位-您可以执行我的$mtime=stat$filename[9]或者您可以加载过去12年的File::stat core并执行我的$mtime=stat$filename->mtime.com!我是从我10年前写的一个脚本中提取出来的,所以它肯定不是完美的,在适合发布之前,我必须对它进行大量编辑。。e、 我不敢相信我没有严格使用;使用警告;:染料。这将旋转图像。但是我如何决定旋转哪些图像呢?我想要一个函数来检查图像标题,并检查它是否被F-Spot旋转。如果没有,该函数将停止。如果已旋转,则函数将图像旋转适当的量。F-Spot和其他一些程序,包括一些相机,通过添加一个注释来旋转图像,说明图像已经旋转。其他程序忽略该注释,并且不显示旋转的图像。我想找到包含那个音符的图像并正确地旋转它们。现在,我为什么不考虑搜索方向呢?太棒了。mafo的php手册注释中甚至显示了一些代码,我可以使用这些代码。当你知道答案时,用短语表达问题总是比较容易的!我还没有完全发挥作用,但我知道我现在要去哪里。当我有一些实际的工作代码时,我会把它发布在这里。
<?php
// File and rotation
$filename = 'test.jpg';
$degrees = 180;

// Content type
header('Content-type: image/jpeg');

// Load
$source = imagecreatefromjpeg($filename);

// Rotate
$rotate = imagerotate($source, $degrees, 0);

// Output
imagejpeg($rotate);
?>
// Output
imagejpeg($rotate, "new-" . $filename);
?>