You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用Imagick生成JPG预览图时丢失文件扩展名求助

问题根源:多余的换行符导致文件名异常

你遇到的问题其实是**$key变量里包含了不可见的换行符**,这才是预览图文件名看起来丢失.jpg扩展名的核心原因!

看你代码里的这行:

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

PHP_EOL是对应系统的换行符(Windows下是\r\n,Linux/macOS下是\n),它会被拼接到文件名前缀里,最终生成的文件名其实是类似example\n.jpg这样的格式。操作系统中,文件名里的换行符不会被正常显示,所以你看到的文件名就只剩下example,看起来像是丢失了.jpg扩展名,但实际上扩展名是存在的,只是被换行符隔开,系统无法正常识别展示。

解决方案:移除多余的换行符

只需要去掉拼接的PHP_EOL即可,修改后的代码如下:

修复后的代码示例1:

foreach( glob(dirname(__FILE__)."/../../img/plakate/full/*.jpg") as $img ){
    // 移除PHP_EOL,获取正确的文件名前缀
    $key = basename($img,'.jpg');
    // 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();
}

修复后的代码示例2:

foreach( glob(dirname(__FILE__)."/../../img/plakate/full/*.jpg") as $img ){
    // 移除PHP_EOL,获取正确的文件名前缀
    $key = basename($img,'.jpg');
    // 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();
}

额外验证小技巧

如果你想直观确认之前的问题,不妨在代码里加一行输出查看实际生成的文件名:

echo "当前生成的文件名:lib/img/plakate/preview/{$key}.jpg\n";

你会看到输出里的文件名中间有明显的换行,这就能一眼发现问题所在了。

内容的提问来源于stack exchange,提问作者WGS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 12:02:36