2012-05-22 30 views
7

Khi tôi chạy Máy tự động của Apple chỉ đơn giản là cắt một loạt các hình ảnh trong kích thước của chúng Máy tự động cũng sẽ làm giảm chất lượng của các tập tin (jpg) và chúng bị nhòe.Máy tự động của Apple: cài đặt nén cho jpg?

Làm cách nào để ngăn chặn điều này? Có những cài đặt mà tôi có thể kiểm soát không?

Edit:

Hoặc là có bất kỳ công cụ khác mà thực hiện công việc tương tự nhưng mà không ảnh hưởng chất lượng hình ảnh?

Trả lời

5

Hành động "Hình ảnh cắt" và "Quy mô hình ảnh" của Automator không có cài đặt chất lượng - như thường xảy ra với Automator, tính đơn giản vượt trội so với khả năng định cấu hình. Tuy nhiên, có một cách khác để truy cập các cơ sở xử lý ảnh CoreImage ‘s whithout phải dùng đến chương trình ca cao: các Scriptable Hình ảnh Hệ thống xử lý, mà làm cho chức năng xử lý hình ảnh có sẵn để

  1. vỏ qua the sips utility. Bạn có thể fiddle với các thiết lập phút nhất bằng cách sử dụng này, nhưng vì nó là một chút phức tạp trong xử lý, bạn có thể được phục vụ tốt hơn với cách thứ hai,
  2. AppleScript qua Image Events, một ứng dụng nền faceless scriptable được cung cấp bởi OS X . có cropscale lệnh, và các tùy chọn chỉ định một mức độ nén khi tiết kiệm như một JPEG với

    save <image> as JPEG with compression level (low|medium|high) 
    

    Sử dụng “Run AppleScript” hành động thay vì “Cắt” của bạn/“Scale” một và quấn Lệnh Sự kiện hình ảnh trong khối tell application "Image Events" và bạn nên đặt. Ví dụ, để mở rộng hình ảnh một nửa kích thước của nó và save as ảnh JPEG chất lượng tốt nhất, ghi đè lên bản gốc:

    on run {input, parameters} 
        set output to {} 
        repeat with aPath in input 
         tell application "Image Events" 
          set aPicture to open aPath 
          try 
           scale aPicture by factor 0.5 
           set end of output to save aPicture as JPEG with compression level low 
          on error errorMessage 
           log errorMessage 
          end try 
          close aPicture 
         end tell 
        end repeat 
        return output -- next action processes edited files. 
    end run 
    

    - cho quy mô khác, điều chỉnh yếu tố phù hợp (1 = 100%, .5 = 50 %, .25 = 25%, v.v.); cho một vụ cắt, thay thế scale aPicture by factor X bằng crop aPicture to {width, height}. Mac OS X Automation có hướng dẫn tốt về cách sử dụng cả hai scalecrop.

+0

Cảm ơn câu trả lời chính xác này nhưng rất tiếc tất cả những điều này không thực sự nói gì với tôi. Tôi chưa bao giờ làm việc với AppleScript. Tôi cũng tự hỏi tại sao điều này xảy ra anyways gây ra không có gì trong tự động hóa của tôi yêu cầu một nén. – Melros

+0

@melros: Các hành động của máy tự động được thiết kế để đơn giản, không thể định cấu hình, có nghĩa là bạn chủ yếu là lòng thương xót của các quyết định của nhà phát triển hành động đối với việc triển khai của họ. – kopischke

+0

@Melros: Tôi đã mở rộng câu trả lời của mình bằng mã mẫu. – kopischke

4

Nếu bạn muốn kiểm soát tốt hơn lượng nén JPEG, vì kopischke cho biết bạn sẽ phải sử dụng tiện ích sips, có thể được sử dụng trong tập lệnh shell. Đây là cách bạn sẽ làm điều đó trong Automator:

Đầu tiên có được các tập tin và các thiết lập nén:

Passing files and compression settings to a shell script in Automator

Hãy chắc chắn rằng đầu tiên Get Giá trị của hành động Biến không chấp nhận bất kỳ đầu vào (bên phải -nhấp vào chúng, chọn "Bỏ qua đầu vào") và rằng giá trị thứ hai Nhận giá trị biến số lấy đầu vào từ đầu tiên. Điều này tạo ra một mảng sau đó được truyền vào kịch bản lệnh shell. Mục đầu tiên trong mảng là mức độ nén được cung cấp cho Tập lệnh Tự động hóa. Thứ hai là danh sách các tệp mà tập lệnh sẽ thực hiện lệnh sips.

Trong các tùy chọn ở trên cùng của hành động Chạy Shell Script, chọn "/ bin/bash" làm Shell và chọn "làm đối số" cho Nhập liệu qua. Sau đó dán mã này:

itemNumber=0 
compressionLevel=0 

for file in [email protected] 
do 
    if [ "$itemNumber" = "0" ]; then 
     compressionLevel=$file 
    else 
     echo "Processing $file" 
     filename=$file 
     sips -s format jpeg -s formatOptions $compressionLevel $file --out ${filename%.*}.jpg 
    fi 
    itemNumber=itemNumber+1; 
done 
osascript -e 'tell app "Automator" to display dialog "Done." buttons {"OK"}' 

Nếu bạn bấm vào Kết quả ở phía dưới, nó sẽ cho bạn biết những gì nộp nó hiện đang làm việc trên. Vui chơi!

+0

Cảm ơn bạn Eric! Bất kỳ cơ hội nào bạn vẫn có tập lệnh luồng công việc để chia sẻ? – Warpling

+0

Ở đây bạn đi: http://www.wikiupload.com/5Z3C6CITGTBFW4R – Eric

2

Mã của Eric thật tuyệt vời. Có thể nhận được hầu hết các công việc làm. nhưng nếu tên tệp hình ảnh chứa không gian, luồng công việc này sẽ không hoạt động (do không gian sẽ phá vỡ tập lệnh shell khi xử lý sips.) Có một giải pháp đơn giản cho việc này: thêm "Đổi tên mục tìm kiếm" trong luồng công việc này. thay thế dấu cách bằng "_" hoặc bất kỳ thứ gì bạn thích. thì tốt.

0

Nhận xét từ '17

Để tránh sự cố "không gian", thông minh hơn để thay đổi IFS hơn đổi tên. Sao lưu IFS hiện tại và chỉ thay đổi thành \ n. Và khôi phục IFS gốc sau vòng lặp xử lý.

ORG_IFS=$IFS 
IFS=$'\n' 
for file in [email protected] 
do 
    ... 
done 
IFS=$ORG_IFS 
Các vấn đề liên quan