vectorizer.io API批量图片矢量化Bash脚本报错求助及优化需求
问题解决与脚本优化
错误原因分析
curl错误(26) Failed to open/read local data from file/application核心原因是原脚本无法处理带空格、特殊字符的文件名:用for file in $(find ...)遍历结果时,空格会被当作分隔符,把单个文件名拆分成多个变量,导致curl找不到正确的文件路径。其次需确认API_CREDITS_CODE是否已正确填充。
修复后支持多格式的脚本
#!/bin/bash # 填写你的vectorizer.io API凭证码 API_CREDITS_CODE="你的凭证码" # 设置图片目录 DIRECTORY="/Users/User/Desktop/folderofimages" # 遍历所有常见图片格式:gif/jpg/png/bmp/webp/tiff等 find "$DIRECTORY" -type f \( -iname "*.gif" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.bmp" -o -iname "*.webp" -o -iname "*.tiff" \) | while IFS= read -r file; do # 生成不带扩展名的输出文件名 filename="${file%.*}" # 跳过不存在的文件(如无效符号链接) if [ ! -f "$file" ]; then echo "跳过无效文件: $file" continue fi echo "正在处理: $file" # 调用API转换图片 curl --http1.1 -H "Expect:" --header "X-CREDITS-CODE: $API_CREDITS_CODE" \ "https://api.vectorizer.io/v4.0/vectorize" \ -F "image=@$file" \ -F "format=svg" \ -F "colors=0" \ -F "model=auto" \ -F "algorithm=auto" \ -F "details=auto" \ -F "antialiasing=off" \ -F "minarea=5" \ -F "colormergefactor=5" \ -F "unit=auto" \ -F "width=0" \ -F "height=0" \ -F "roundness=default" \ -F "palette=" \ -o "${filename}.svg" # 输出处理结果 if [ $? -eq 0 ]; then echo "处理完成: ${filename}.svg" else echo "处理失败: $file" fi done
关键优化点
- 改用
while IFS= read -r file循环读取find结果,完美兼容带空格、特殊字符的文件名,彻底解决curl(26)错误。 - 添加
-type f参数,确保只处理文件,排除目录和无效符号链接。 - 扩展图片格式匹配范围,覆盖常见的gif/jpg/png/bmp/webp/tiff等格式,如需新增格式,只需在find的括号内添加
-o -iname "*.格式"。 - 增加文件有效性检查和curl执行结果判断,方便快速定位问题。
注意事项
- 必须先在
API_CREDITS_CODE中填入你的凭证码,可在vectorizer.io的「Api Settings」页面获取。 - 如果需要调试请求细节,可在curl命令中添加
-vvv参数查看完整日志。
内容的提问来源于stack exchange,提问作者CeramicMonster
相关产品推荐
相关产品推荐

