PHP: при сохранении изображения в формате JPG расширение файла всегда отсутствует - PullRequest
0 голосов
/ 19 апреля 2020

Я написал крошечный скрипт для предварительного просмотра всех изображений 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();

}

Как я вижу, все работает нормально - отсутствует только расширение файла. (

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Ваш код $key = basename($img,'.jpg').PHP_EOL; имеет PHP_EOL в конце, говоря, что строка заканчивается здесь, "отбрасывая" что-либо после него при сборке имени файла.

Измените $key = basename($img,'.jpg').PHP_EOL; на $key = basename($img,'.jpg'); на добавьте расширение вашего файла.

0 голосов
/ 19 апреля 2020

Вы можете просто использовать его вместо basename,

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

или pathinfo

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