Quicker 2.0 下 JPEG(MozJPEG) 压缩失败的原因与修复
症状:2.0 里压缩 jpg 报 执行CS脚本出错:Value cannot be null. (Parameter 'bitmapdata'),1.x 正常。PNG(PngQuant) 那条路不受影响。
执行CS脚本出错:Value cannot be null. (Parameter 'bitmapdata')
真因:2.0 的 C# 脚本运行在 .NET 10 上,P/Invoke 不再搜索"动作文件夹 / 当前目录"。MozJpegWrapper 内部用的是裸文件名 DllImport("turbojpeg_x64.dll"),找不到动作附件目录里的 turbojpeg;包装内部加载失败后又在 finally 里对未赋值的 bitmapdata 调用 UnlockBits,把真正的错误盖成了上面那句。
MozJpegWrapper
DllImport("turbojpeg_x64.dll")
bitmapdata
UnlockBits
修复:打开子程序 「图片压缩」→ 步骤「运行C#代码」,在脚本里 public static void Exec(Quicker.Public.IStepContext context){ 这行的下面插入:
public static void Exec(Quicker.Public.IStepContext context){
注意:
{MozJPEG64}
{MozJPEG32}
{Wrapper}
$$
using System.Runtime.InteropServices;
NativeLibrary
实测:345 KB 的 jpg(质量 98)压缩后 122 KB(质量 80),PNG 行为不变。