PHP将选定目录中图像的文件扩展名从各种格式更改为jpg

PHP将选定目录中图像的文件扩展名从各种格式更改为jpg,php,Php,我创建了一个代码,将多个图像上传到一个具有不同扩展名的文件夹中,例如gif、jpg、bmp等 我想将文件夹中的所有图像转换为jpg。我尝试重命名实例,但我发现的代码给了我两个文件扩展名,例如hello.gif.jpg或bye.jpg.jpg 我尝试执行上述过程的最新代码使用以下代码: <?php $directory = "img/"; $images = glob($directory . "*.jpg"); $a = 0; foreach($images as $image) { $

我创建了一个代码,将多个图像上传到一个具有不同扩展名的文件夹中,例如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,我只想更改扩展名。

您将获得双文件扩展名,因为文件名是,例如,
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"); 
}

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

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

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

转换文件不仅仅是重命名文件 可以使用诸如之类的工具将图像文件从一种格式正确转换为另一种格式

使用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`;
}

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

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

exif_imagetpye()返回IMAGETYPE_PNG的示例

当这种情况发生时,看看

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

foreach ( $images as $image ) {
   $file_info = pathinfo($image);
   rename($image, $file_info['filename'].".jpg");
}

unix类型的重命名操作不像dos样式的
ren*.gif*.bmp
。您必须分解原始文件名,去掉原始扩展名,然后添加
.jpg
后缀。请注意,这并没有改变它们的实际格式,它们只是一个gif/bmp/或任何关于jpg的谎言。@MarcB我知道并理解,但这是我目前想做的。
pathinfo()
为您进行完整的文件/路径解构,无需手动执行字符串操作。我建议使用pathinfo来确定文件名/扩展名(因为有人可以上载名为
'hello.image.jpeg'
)的文件。我没有意识到
pathinfo()
允许您获取不带扩展名的文件名,这很方便!不过,我会让其他人回答:)
foreach ( $images as $image ) {
   $file_info = pathinfo($image);
   rename($image, $file_info['filename'].".jpg");
}