0

我创建了一个代码来将多个图像上传到具有不同扩展名的文件夹,例如 gif、jpg、bmp 等...

我想将文件夹中的所有图像转换为jpg。我尝试使用重命名的实例,但我发现的代码给了我双文件扩展名,例如 hello.gif.jpg 或 bye.jpg.jpg

我尝试执行上述过程的最新代码使用以下代码:

<?php
$directory = "img/";
$images = glob($directory . "*.jpg"); 
$a = 0;
foreach($images as $image)
{
$a++;
rename($image, "test/".$a.".jpg"); 
}
?>

我没有收到任何错误。我不想将各种格式的图像转换为 jpg,我只想更改扩展名。

4

3 回答 3

2

我想将文件夹中的所有图像转换为jpg

问题中的脚本没有这样做,它只是重命名文件;一个名为的 giffoo.jpg仍然一个 gif。

浏览器可能会忽略标题并正确显示错误命名的图像文件(对于浏览器来说,文件名/url 并不重要 - 标题决定格式,但是网络服务器将根据文件名发送内容类型标题) - 它可能但是,只需将图像视为损坏的 jpeg 并且不显示任何内容。

转换文件不仅仅是重命名它们

您可以使用ImageMagik等工具将图像文件从一种格式正确转换为另一种格式。

使用 ImageMagik 的脚本(通过 cli 作弊,因为它更易于使用)例如:

<?php
$directory = "img/";
chdir($directory);
$images = glob($directory . "*"); 
foreach($images as $image) {
    if (substr($image, -4) === '.jpg') {
        continue;
    }
    $newname = preg_replace('@\..*$@', '.jpg', $image);
    `convert $image $newname`;
}

为工作使用正确的工具

请注意,上面的 PHP 脚本可能有效,但可以使用更合适的工具。例如mogrify是 ImageMagik 提供的另一个 cli,可用于执行批处理操作。将单个文件夹中的所有 png 文件转换为 jpeg 非常简单:

$ cd imgs/are/here/
$ mogrify -format jpg *.png
于 2013-10-08T15:43:38.817 回答
0

您将获得双重文件扩展名,因为文件的名称是,例如,hello.gif. 然后,您将.jpg在最后附加它hello.gif.jpg

您必须首先从文件名中删除扩展名,然后使用新名称保存。像这样:

<?php

$directory = "img/";
$images = glob($directory . "*.jpg"); 
$a = 0;

foreach($images as $image) {
    $a++;
    $trimmed = substr($image, 0, strpos($name, '.'));
    rename($image, "test/" . $trimmed . ".jpg"); 
}

substr($image, 0, strpos($name, '.'))将确保您只获得文件名,而不是扩展名。它通过删除它.之后的和任何字符来做到这一点。

于 2013-10-08T15:40:51.183 回答
0

您所做的相当于将文档文件重命名为 excel 文件。即使它们具有相似的目的(显示图像),它们也不意味着兼容。

你最好循环浏览图像(这是你已经做过的),确定它的图像类型,然后根据它改变格式。

exif_imagetpye() 返回 IMAGETYPE_PNG 的示例。

发生这种情况时,请查看此解决方案

如果您只想重命名文件而不关心文档类型:

foreach ( $images as $image ) {
   $file_info = pathinfo($image);
   rename($image, $file_info['filename'].".jpg");
}
于 2013-10-08T15:45:45.293 回答