拯救设计师的无聊时光:一键导出 AI 文件中的所有图片

😫 又在手动导出图片?停!

亲爱的设计师朋友们,你是否曾经历过这样的场景:

  • 打开 AI 文件,发现里面塞满了嵌入图片
  • 一张一张地点开,右键,导出,保存…
  • 重复 100 遍后开始怀疑人生
  • 最后放弃治疗,去喝咖啡了 ☕️

不用担心!今天我要分享一个神奇的脚本,它能在你喝完一口咖啡的时间里,完成所有图片的导出工作!

🎯 这个脚本能干啥?

  • 自动找出所有藏在文件里的图片(就像寻宝一样!)
  • 支持各种格式(JPG、PNG…通通安排!)
  • 一键批量导出(解放你的双手,去摸摸猫吧 🐱)
  • 自动重命名(再也不用手动改名字了)

🚀 见证奇迹的时刻

1. 先看代码

function main() {
    if (app.documents.length == 0) {
        alert("请至少打开一个文档。", "提示");
        return;
    }

    var doc = app.activeDocument;
    var embeddedItems = [];

    // 遍历所有页面项并检查是否嵌入
    for (var i = 0; i < doc.pageItems.length; i++) {
        var pageItem = doc.pageItems[i];
        if ((pageItem.typename == "PlacedItem" && pageItem.file == null) ||
            (pageItem.typename == "RasterItem" && pageItem.embedded)) {
            embeddedItems.push(pageItem);
        }
    }

    if (embeddedItems.length == 0) {
        alert("没有嵌入的对象需要导出。");
        return;
    }

    // 让用户选择导出路径
    var exportFolder = Folder.selectDialog("选择导出嵌入对象的文件夹");
    if (exportFolder == null) {
        alert("没有选择导出文件夹。");
        return;
    }

    for (var i = 0; i < embeddedItems.length; i++) {
        var embeddedItem = embeddedItems[i];
        var fileName = "Object_" + (i + 1); // 默认命名,不带扩展名
        var filePath = new File(exportFolder.fsName + "/" + fileName);

        exportEmbeddedItem(embeddedItem, filePath);
    }

    alert("嵌入对象导出完成!");
}

function exportEmbeddedItem(item, file) {
    var exportOptions;

    if (item.typename == "PlacedItem") {
        // 导出为其原始格式
        var originalFormat = getOriginalFormat(item);
        file = new File(file.fsName + originalFormat); // 添加扩展名

        // 创建一个临时文档
        var tempDoc = app.documents.add(DocumentColorSpace.RGB, item.width, item.height);
        var tempLayer = tempDoc.layers[0];

        // 复制嵌入对象到新文档
        var copiedItem = item.duplicate(tempLayer, ElementPlacement.PLACEATBEGINNING);
        copiedItem.position = [0, 0]; // 设置位置

        // 导出
        tempDoc.exportFile(file, ExportType.JPEG, exportOptions); // 将 ExportType 修改为适当的类型
        tempDoc.close(SaveOptions.DONOTSAVECHANGES);
    } else if (item.typename == "RasterItem") {
        // 导出为 PNG
        exportOptions = new ExportOptionsPNG24();
        exportOptions.transparency = true;
        file = new File(file.fsName + ".png"); // 添加扩展名

        // 创建一个临时文档
        var tempDoc = app.documents.add(DocumentColorSpace.RGB, item.width, item.height);
        var tempLayer = tempDoc.layers[0];

        // 复制嵌入对象到新文档
        var copiedItem = item.duplicate(tempLayer, ElementPlacement.PLACEATBEGINNING);
        copiedItem.position = [0, 0]; // 设置位置

        // 导出
        tempDoc.exportFile(file, ExportType.PNG24, exportOptions);
        tempDoc.close(SaveOptions.DONOTSAVECHANGES);
    }
}

function getOriginalFormat(item) {
    // 根据嵌入对象的内容推断原始格式
    var fileExtension = ".jpg"; // 默认扩展名

    if (item.file) {
        var fileName = item.file.name;
        fileExtension = fileName.substring(fileName.lastIndexOf("."));
    }

    return fileExtension;
}

main();

2. 复制代码

复制代码,保存为 export-ai-images.jsx,然后等待奇迹发生(或者至少是代码不报错)🤞

3. 运行脚本

  1. 打开你的 AI(对,就是那个图标)
  2. 打开需要处理的文件(确保里面有图片哦)
  3. 文件 > 脚本 > 其他脚本…,选择 export-ai-images.jsx,然后… 魔法发生了!(如果没有,检查一下你的咖啡有没有喝完)✨
  4. 选个保存的地方
  5. 然后?没有然后了!去喝杯咖啡吧 ☕️

⚠️ 友情提示

  • 记得先保存文件(以防万一,你懂的)
  • 确保电脑还有点存储空间(不然就尴尬了)
  • 大文件可能需要等一会儿(趁机休息一下眼睛)
  • 某些特殊格式可能会耍脾气(淡定,这是正常的)

🎉 结语

有了这个脚本,你就可以:

  • 告别重复性工作
  • 省下的时间去创作
  • 或者…多刷会儿视频 😉

记住,工具就是用来让生活更轻松的。如果你有什么好主意,欢迎来和我分享!

🌟 写代码不是为了折磨自己,而是为了让生活更有趣!

希望这个小工具能让你的设计工作更轻松愉快!如果觉得好用,别忘了分享给其他被重复工作折磨的设计师朋友们~

✨ 用爱创作 © 2024 Hope

由充满想象力的 Hope 倾情创作

灵感迸发于 2024-01-30 的一个美好夜晚

来和我一起玩耍吧~ Github · Pinterest