Tôi chưa làm gì với Lua
Lua có lẽ là ngôn ngữ lập trình đơn giản nhất, sạch nhất mà tôi biết. (Và tôi biết một vài .)
Sự đơn giản của Lua cũng là điểm yếu lớn nhất của nó: là một ngôn ngữ nhỏ, gọn gàng theo thiết kế, nó không có nhiều thứ được tích hợp trong đó mà bạn mong muốn tìm thấy khi đến từ một ngôn ngữ cấp công nghiệp như Java hoặc pin ngôn ngữ bao gồm như Python.
Lua được thiết kế để được mở rộng bằng C, trong trường hợp này có nghĩa là SDK của Lightroom. Thật tuyệt nếu Adobe đã hoàn thành công việc để cung cấp các công cụ bạn cần không có trong Lua, nhưng thỉnh thoảng bạn có thể sẽ thấy mình gọi ra các công cụ bên ngoài để hoàn thành công việc.
API Lightroom có dễ dàng kết nối không
Phần khó khăn duy nhất về nó là bạn cần cấu trúc mã nguồn theo một cách cụ thể và cung cấp một Info.lua
tệp đặc biệt để nói với Lightroom về plugin của bạn. Tất cả đều được giải thích trong các tài liệu SDK . SDK bao gồm một số plugin hoạt động để bắt đầu, bao gồm một plugin "hello world" khá phức tạp có thể được quét để lấy mã bắt đầu hữu ích.
nó có yêu cầu bất kỳ công cụ chuyên dụng để phát triển không?
Bạn có thể nhận được chỉ bằng một trình soạn thảo văn bản.
Không có tiện ích gỡ lỗi được tích hợp trong Lightroom, nhưng có một cơ sở ghi nhật ký gỡ lỗi trong SDK. Bạn có thể bắt những tin nhắn này trong WinDbg
Windows hoặc Console
trên OS X.
Một phát triển gần đây là mã nguồn mở ZeroBrane Studio Lua IDE. Bạn có thể sử dụng cái này thay vì một trình soạn thảo văn bản khác, nhưng điều thực sự thú vị là có thể đính kèm nó vào plugin đang chạy của bạn , cho phép bạn gỡ lỗi khi nó chạy. Tôi đã thử điều này và nó giúp giảm thời gian chu kỳ sửa lỗi / tải lại / khởi động lại.
Tôi có thể viết các kịch bản để thực hiện các loại nhiệm vụ tôi mô tả ở trên một cách dễ dàng không?
Tôi không nghĩ một trong hai nhiệm vụ là 100% có thể thực hiện được khi chỉ sử dụng SDK Lightroom, nhưng nó có thể thực hiện rất nhiều công việc cho bạn.
chọn tệp trong mỗi ngăn xếp với phần mở rộng JPG và đặt nó lên trên cùng của ngăn xếp
Đây là một số mã giống như Lua mơ hồ để giúp bạn gần như hoàn thành:
for photo in catalog:getMultipleSelectedOrAllPhotos() do
for peer in photo:stackInFolderMembers() do
if string.find('%.jpg$', peer:getFormattedMetadata('fileName')) then
-- *mumble* move 'peer' photo to top of stack *mumble*
break
end
end
end
Thật không may, tôi không thấy một cách nào trong SDK để thực hiện hành động của dòng bình luận cuối cùng đó, kể từ LR 5. Điều tốt nhất tôi có thể nghĩ ra là gọi catalog:setSelectedPhotos(peer)
, sau đó để nó cho người dùng thực sự nhấp vào huy hiệu số để sắp xếp lại ngăn xếp.
Thực hiện sao chép siêu dữ liệu hàng loạt từ tệp RAW (hiện tại) sang tệp JPEG (hiện tại)
Bạn có thể thực hiện một số điều này với SDK hiện có, nhưng có những hạn chế.
Ví dụ: trong khi bạn có thể đọc giá trị của trường EXIF dateTimeOriginal
, không có cơ sở nào trong chính SDK để đặt giá trị. Tôi cho rằng điều này là do các nhà phát triển Lightroom quyết định điều này không bao giờ được thay đổi theo chương trình, đó là thông tin quý giá từ máy ảnh. (Tại sao đó là trường hợp khi có một siêu dữ liệu> Chỉnh sửa thời gian chụp ... mục menu tôi không biết, nhưng bạn có nó.)
Nhưng, bất cứ khi nào SDK cố gắng gài bẫy bạn với một trong những hạn chế này, thường có một lối thoát. Bạn có thể cài đặt ExifTool và gọi nó từ Lua, ví dụ. Đó không phải là một giải pháp hoàn hảo, vì sau đó bạn có sự không nhất quán giữa siêu dữ liệu danh mục và siêu dữ liệu ảnh, nhưng Lightroom sẽ chú ý và đặt huy hiệu lên ảnh, khi nhấp vào sẽ cho phép bạn giải quyết xung đột bằng cách tải lại siêu dữ liệu từ ảnh.
(Bạn sẽ muốn có tùy chọn "Tự động ghi thay đổi vào XMP" trong hộp thoại Cài đặt danh mục khi sử dụng plugin như vậy. Nếu không, bạn sẽ dễ dàng tạo xung đột hai chiều, trong đó cả siêu dữ liệu ảnh và danh mục đều có đã thay đổi. Lightroom không biết cách hợp nhất hai bộ siêu dữ liệu, nó khiến bạn chọn một bộ và ghi đè lên bản sao siêu dữ liệu khác với nó.)