Total Image Converter X是可以安装在Web服务器上的正确解决方案。
Windows
2000/2003/Vista
7/8/10/11
and
2012/2016/2019/2022 Server
and
Docker/Citrix/Wine
Total Image Converter X 是一款服务器端 SDK,可转换 TIFF、JPEG、PNG、BMP、PSD、WebP、RAW(NEF、CR2、CR3、ARW、ORF、RAF、DNG 等)以及 35 多种其他图像格式 — 无需在服务器上安装外部编解码器包或图像处理框架。它以无界面方式运行:没有 GUI、没有对话框、没有弹窗。Total Image Converter X 同时提供 命令行程序和 ActiveX/COM 接口,因此可以直接接入 ASP、PHP、.NET、Python、Ruby、Java 以及任何支持 COM 的后端。完整的支持图像格式列表:
程序实时处理图像,无需中间文件。多线程转换引擎可在多核服务器上发挥最大吞吐量。
转换速度快、批量处理顺畅,让整个流程简单不枯燥。免费试用 30 天,无任何功能限制,您将发现它确实物有所值。
当前支持的部分文件格式转换:
|
|
|
LLM 智能体(Claude、ChatGPT、Cursor、Cline)和检索框架(LangChain、LlamaIndex、Haystack)无法读取像素 — 它们读取的是文本。Total Image Converter X 会对您批量的 TIFF、JPEG、PNG、BMP、多页 TIFF、PSD、WebP 和 RAW 图像运行 OCR,并将识别出的文本写成 GitHub-Flavored Markdown,配以结构化的 frontmatter 与可选的 Docling 兼容旁路文件,让扫描文档和截图进入您的向量存储时具备页面锚点和版式提示,是可检索的文本 — 而不是不透明的二进制块。
选择 Markdown 输出后您会得到:
source_file、format(MIME)、page_count、ocr_language、ocr_confidence_avg、dpi、色彩空间(sRGB/CMYK)、generator、created,以及用于溯源的 binary_hash
.docling.json 旁路文件 — 符合 Docling schema 的 JSON:表格边界矩形、每页锚点、每个区域的 OCR 置信度、相机图像的 EXIF 元数据,以及分块器可读取的 chunks_hint 数组
这就是 CoolUtils RAG Adapter — 一套统一的 Markdown 约定,由每款 Total Converter X 产品共享。完整规范、样例 .md + .docling.json 以及集成代码片段,请见 Coolutils Converter X — RAG Adapter 页面。
string src = @"C:\test\Source.tiff";
string dest = @"C:\test\Dest.jpg";
var cnv = new ImageConverterX();
cnv.Convert(src, dest, "-cJPG -log c:\\test\\Image.log");
if (!string.IsNullOrEmpty(cnv.ErrorMessage))
throw new Exception(cnv.ErrorMessage);
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
StringBuilder sbLogs = new StringBuilder();
sbLogs.AppendLine("started...");
try
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
var assemblyDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
assemblyDirectoryPath = assemblyDirectoryPath.Substring(0, assemblyDirectoryPath.Length - 4);
var executablePath = $@"{assemblyDirectoryPath}\Converter\ImageConverterX.exe";
sbLogs.AppendLine(executablePath + "...");
var srcPath = $@"{assemblyDirectoryPath}\src\sample.tiff";
var outPath = Path.GetTempFileName() + ".jpg";
startInfo.FileName = executablePath;
if (File.Exists(outPath))
{
File.Delete(outPath);
}
if (File.Exists(executablePath) && File.Exists(srcPath))
{
sbLogs.AppendLine("files exists...");
}
else
sbLogs.AppendLine("EXE & source files NOT exists...");
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = $"{srcPath} {outPath}";
using (Process exeProcess = Process.Start(startInfo))
{
sbLogs.AppendLine($"wait...{DateTime.Now.ToString()}");
exeProcess.WaitForExit();
sbLogs.AppendLine($"complete...{DateTime.Now.ToString()}");
}
int sleepCounter = 10;
while(!File.Exists(outPath) && sleepCounter > 0)
{
System.Threading.Thread.Sleep(1000);
sbLogs.AppendLine("sleep...");
sleepCounter--;
}
if (File.Exists(outPath))
sbLogs.AppendLine("Conversion complete successfully.");
}
catch (Exception ex)
{
sbLogs.AppendLine(ex.ToString());
}
return new OkObjectResult(sbLogs);
}
}
dim C
Set C=CreateObject("ImageConverter.ImageConverterX")
C.Convert "c:\source.bmp", "c:\dest.tif", "-cTIFF -log c:\Image.log"
Response.Write C.ErrorMessage
set C = nothing
dim C
Set C=CreateObject("ImageConverter.ImageConverterX")
Response.Clear
Response.AddHeader "Content-Type", "binary/octet-stream"
Response.AddHeader "Content-Disposition", "attachment; filename=test.pdf"
Response.BinaryWrite C.ConvertToStream("C:\www\ASP\Source.tiff", "C:\www\ASP", "-cpdf -log c:\Image.log")
set C = nothing
$src="C:\\test\\test.jpg";
$dest="C:\\test\\test.gif";
if (file_exists($dest)) unlink($dest);
$c= new COM("ImageConverter.ImageConverterX");
$c->convert($src,$dest, "-c gif -log c:\\test\\Image.log");
if (file_exists($dest)) echo "OK"; else echo "fail:".$c->ErrorMessage;
require 'win32ole'
c = WIN32OLE.new('ImageConverter.ImageConverterX')
src = "C:\\test\\test.tiff"
dest = "C:\\test\\test.jpg"
c.convert(src, dest, "-c JPG -log c:\\test\\Image.log")
if not File.exist?(dest)
puts c.ErrorMessage
end
import win32com.client
import os.path
c = win32com.client.Dispatch("ImageConverter.ImageConverterX")
src = "C:\\test\\test.tiff"
dest = "C:\\test\\test.jpg"
c.convert(src, dest, "-c JPG -log c:\\test\\Image.log")
if not os.path.exists(dest):
print(c.ErrorMessage)
uses Dialogs, Vcl.OleAuto;
var
c: OleVariant;
begin
c := CreateOleObject('ImageConverter.ImageConverterX');
c.Convert('c:\test\source.tiff', 'c:\test\dest.jpg', '-cJPG -log c:\test\Image.log');
if c.ErrorMessage <> '' then
ShowMessage(c.ErrorMessage);
end;
var c = new ActiveXObject("ImageConverter.ImageConverterX");
c.Convert("C:\\test\\source.tiff", "C:\\test\\dest.jpg", "-c JPG");
if (c.ErrorMessage != "")
alert(c.ErrorMessage)
use Win32::OLE; my $src = "C:\\test\\test.tiff"; my $dest = "C:\\test\\test.jpg"; my $c = CreateObject Win32::OLE 'ImageConverter.ImageConverterX'; $c->convert($src, $dest, "-c JPG -log c:\\test\\Image.log"); print $c->ErrorMessage if -e $dest;
"我们接收客户上传的各种格式的设计稿:带图层的 PSD、用于胶印的 CMYK TIFF、带透明通道的 PNG,偶尔还有摄影师送来的 RAW。Total Image Converter X 在一个流水线中将这些全部归一化为可付印的 CMYK TIFF 和用于网页预览的 JPEG。在编码节点上稳定运行了五年,没有任何意外。在我们的硬件上,处理 2400 万像素的输入大约能达到每秒 40 张的吞吐量。"
Erik W.
Senior Backend Developer at a print-on-demand platform
"经纪人会直接从手机和单反上传房源照片 — HEIC、RAW、超大 JPEG,应有尽有。Total Image Converter X 把它们调整为三种响应式尺寸,并为公开网站输出 WebP。.NET 包装器无缝接入我们现有的流水线;-log 输出每个文件一行结构化日志,很容易接到日志聚合系统。在 Windows Server Core 上无界面运行,不依赖 Office、不依赖 Photoshop,没有许可证方面的麻烦。"
Anjali K.
DevOps Engineer at a real-estate listings SaaS
"我们将扫描后的患者病历归档为多页 TIFF,并需要为临床医生门户发布 PDF 副本。Total Image Converter X 能稳定处理 600 DPI 的灰度 TIFF 堆叠,按审计要求加上水印,并生成符合 ISO 标准的 PDF/A。CLI 在多次运行间保持确定性,对于保管链记录非常重要。五年来无人值守的夜间转换,没有出现过可归咎于转换器的失败。"
Paolo M.
CTO at a medical-imaging archive
"我们以免版税许可将 Total Image Converter X 集成到自己的照片管理产品中。一次性的项目费用,仅相当于基于 ImageMagick 的商业封装在分发授权上要价的一小部分。我们的安装程序会发布并注册 ActiveX,应用直接调用它,最终用户只看到我们自己的界面。32 位 ActiveX 的限制让我们花了几天时间调整流水线,但当我们询问解决方案时,技术支持响应及时。"
Greta H.
Independent Software Vendor
"我们的商家会上传 JPEG、PNG,偶尔还有带图层的 PSD 商品照片。我们需要为每件商品生成三种尺寸的干净 WebP,外加一组缩略图。Total Image Converter X 输出具有确定性:相同的输入加相同的参数,磁盘上的字节完全一致。这正是我们 CDN 缓存失效逻辑所需要的。在四年的生产环境使用中保持稳定可预测。"
Hideo T.
Lead .NET Developer at an e-commerce platform
new COM("ImageConverter.ImageConverterX"),.NET 中使用 new ImageConverterX(),Python 中使用 win32com.client.Dispatch,Ruby 中使用 WIN32OLE.new。此外,ImageConverterX.exe 命令行程序可从任何进程、调度器或 shell 脚本中调用。还提供 ConvertToStream 直接 PDF 流式输出功能,可用于 ASP/PHP 网页响应。-r <WxH> 调整大小(绝对值或百分比),-Rotate <90|180|270> 旋转,-Flip Horizontal|Vertical 镜像翻转,-c <format> 指定输出格式。水印:-WatermarkText "Confidential" -WatermarkColor 0xFF0000 用于文字水印,或 -WatermarkImage logo.png 用于图像叠加。色彩深度:-bpp 1|8|24。当输出格式不支持 CMYK 时,会自动进行 CMYK 到 RGB 的转换。-MultipageTIFF 将一个文件夹的单页图像合并为一个 TIFF,-combine 将多张图像合并为一个 PDF。-Recurse 递归遍历子目录;-kfs 在输出端保持原文件夹结构,而不是将所有内容平铺到同一目录。.md 作为输出格式,转换器就会对输入图像(TIFF、JPEG、PNG、BMP、多页 TIFF、PSD、WebP、RAW)运行 OCR,并将识别出的文本写成 GitHub-Flavored Markdown。多页 TIFF 和图像文件夹按文档序列处理,每个页面成为一个小节;检测到的表格会保留为 GFM 表格,而不是被压平成散文。YAML frontmatter 块承载 source_file、page_count、ocr_language、平均 ocr_confidence、源 dpi 与色彩空间,以及 binary hash。这是 CoolUtils RAG Adapter 的一部分 — 每款 Total Converter X 产品共享同一套 Markdown 约定。binary_hash,以及 chunks_hint 数组。在命令行中使用 -Docling 启用。JSON 与 Markdown 相互独立。.md 文件是带 YAML frontmatter 块的纯 GFM,因此 LangChain 的 UnstructuredMarkdownLoader、LlamaIndex 的 MarkdownReader、Haystack 的 MarkdownToDocument 与 Claude Code 的 MCP 文件工具均可直接读取。由于 OCR 置信度被记录在旁路文件中,下游消费方可以选择在嵌入前丢弃或标记低置信度区域。对于 Claude、ChatGPT 或任意聊天 UI,您可以将 Markdown 原样粘贴进上下文。ImageConverterX.exe "C:\scans\*.tif" "C:\rag\" -cMD -Docling -ocr -ocrlang eng -Recurse。-cMD 选择 Markdown;-Docling 额外输出 .docling.json 旁路文件;-ocr 启用 OCR;-ocrlang 设置 OCR 语言(混合语言扫描件可用 eng+rus 等多语言字符串);-Recurse 遍历子目录。多页 TIFF 在单次调用中处理。生成的 Markdown 可直接分块、嵌入并在任意向量存储中建立索引。