PHP: 当我保存 JPG 图片时,文件扩展名总是丢失

PHP: When I save JPG image the file extension is always missing

我写了一个小脚本来创建目录中所有 JPG 图像的预览并将它们保存到另一个目录中。但是文件扩展名 .jpg 总是丢失。我真的不明白为什么。

foreach( glob(dirname(__FILE__)."/../../img/plakate/full/*.jpg") as $img ){

  // key
  $key = basename($img,'.jpg').PHP_EOL;

  // save preview
  $thumb = new Imagick($img);
  $thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
  $thumb->setImageCompressionQuality(10);
  $thumb->resizeImage(50,0,Imagick::FILTER_LANCZOS,1);
  $thumb->writeImage("lib/img/plakate/preview/{$key}.jpg");
  $thumb->destroy();

}

我也试过这个结果是一样的:

foreach( glob(dirname(__FILE__)."/../../img/plakate/full/*.jpg") as $img ){

  // key
  $key = basename($img,'.jpg').PHP_EOL;

  // save preview
  $thumb = new Imagick($img);
  $thumb->setImageCompression(Imagick::COMPRESSION_JPEG);
  $thumb->setImageCompressionQuality(10);
  $thumb->resizeImage(50,0,Imagick::FILTER_LANCZOS,1);
  $thumb->setImageFormat('jpeg');
  file_put_contents ("lib/img/plakate/preview/{$key}.jpg", $thumb);
  $thumb->destroy();

}

正如我所见,一切正常——只是缺少文件扩展名。 :(

您可以简单地使用它来代替 basename

$explodedPath = explode(DIRECTORY_SEPARATOR, $img);
$fileName = $explodedPath[count($explodedPath) - 1];

pathinfo

$pathParts = pathinfo($img);
$fileName = "{$pathParts['filename]}{$pathParts['extension']}"

您的代码 $key = basename($img,'.jpg').PHP_EOL; 末尾有一个 PHP_EOL,表示该行在此结束,"discarding" 组装您的文件名时它后面的任何内容。

$key = basename($img,'.jpg').PHP_EOL; 更改为 $key = basename($img,'.jpg'); 以附加您的文件扩展名。