Máy tự động: Có thể thay đổi kích thước hình ảnh thành kích thước tệp tối đa không?


2

Tôi đã tìm kiếm một phương thức Automator, theo đó một tệp hình ảnh sẽ được thay đổi kích thước (giảm chiều cao và chiều rộng) thành một kích thước tệp cụ thể (tính bằng byte) hoặc gần với kích thước tệp gần đó.

Nó sẽ là một ứng dụng tuyệt vời cho các hành động nhanh của MacOS Mojave, vì nhiều trang tải lên không chấp nhận hình ảnh iPhone kích thước đầy đủ, chẳng hạn.

Trực giác của tôi là đây là một vấn đề khá khó khăn đối với Automator để giải quyết ngay cả với sự trợ giúp của bash script, v.v. Thông thường, ngay cả các ứng dụng như Adobe Photoshop cũng không tuyệt vời trong việc dự đoán kích thước tệp cuối cùng sau khi tệp được nén thành JPG hoặc PNG, v.v. Có lẽ nó có thể giảm dần kích thước hình ảnh cho đến khi nó thấp hơn kích thước tệp tối đa. Dễ nhất sẽ là nếu là một tiện ích kịch bản cho việc này.

Do đó, tôi nghĩ để hỏi nếu:

  • a) Điều này có thể thực hiện được không, và
  • b) Làm thế nào nó sẽ được thực hiện?

Để làm rõ, bạn đang đề cập đến việc nén tệp trước khi nó ảnh hưởng đến hình ảnh? Bạn có thể viết một tập lệnh để phát hiện xem hình ảnh là dọc hay ngang, thay đổi kích thước thành kích thước an toàn như 800px rồi nén.
ʀ2ᴅ2

@ 2ᴅ2 Cảm ơn bạn đã hỏi thăm. Thay đổi kích thước hình ảnh thành kích thước cố định thông qua Automator được trình bày trong các hướng dẫn khác nhau trên web và không khó. Tôi đã suy nghĩ nhiều hơn về việc thay đổi kích thước của nó để xấp xỉ kích thước tệp cụ thể (ví dụ: tối ưu hóa kích thước cho kích thước tệp mong muốn).
Winterflags

Câu trả lời:


2

Tôi hơi bối rối với cách tiếp cận về cách nén đúng hình ảnh bạn muốn làm việc. Như đã đề cập, có sipsmột ví dụ hoạt động dựa trên việc kéo một thư mục hình ảnh và bước qua danh sách với kích thước thay đổi nếu chiều rộng không phải là 800px:

property theWidth : 800

tell application "Finder"
    try
        ## Choose directory
        set imageDir to choose folder with prompt "Please select directory."

        ## Get list of items in diretory
        set the imageList to list folder imageDir without invisibles

        ## Step through images
        repeat with theImage in imageList

            ## Turn path to posix path
            set imagePos to quoted form of POSIX path of ((imageDir as text) & contents of theImage)

            ## Get image width
            set imgWidth to (do shell script "sips -g pixelWidth " & " " & imagePos & " " & "| tail -n1 | cut -d' ' -f4") as integer

            ## if not equal to set variable width resize
            if imgWidth  theWidth then do shell script "sips --resampleWidth " & theWidth & " " & imagePos

        end repeat
    on error error_message
        display dialog error_message
    end try

Đó chỉ là một ví dụ về những gì bạn có thể làm với chiều rộng. Như đã đề cập trong bình luận, bạn có thể kiểm tra xem cái nào dài hơn chiều rộng hoặc chiều cao và thay đổi kích thước từ đó. Nếu bạn làm man sipstrong Terminal, bạn có thể lấy tất cả các loại thông tin. Đoạn mã trên sử dụng đuôi và cắt để cắt trả lại. Thay đổi kích thước được thực hiện với --resampleWidth. Bạn có thể lấy mẫu lại dựa trên chiều cao với --resampleHeight.

Về khía cạnh nén, nếu đây là các PNG bạn có thể sử dụng Optipng . Nếu bạn muốn một cái gì đó bạn có thể chạy với PNG và JPG, bạn có thể sử dụng Trimage . AppleScript / Automater cũng có thể được viết kịch bản bằng cách sử dụng tiện ích nén. Bạn sẽ chỉ cần gọi từ binkiểm tra nếu nén tồn tại:

try
    set checkBin to "(ls usr/local/bin/optipng >> /dev/null 2>&1 && echo yes) || echo no"
    return do shell script checkBin
on error error_message
    return error_message
end try

Trên đây là kiểm tra OptiPNG. Nếu bạn muốn kiểm tra thời tiết, một cái gì đó đã được cài đặt với HomeBrew, bạn có thể sử dụng một lệnh tương tự trên /usr/local/Cellar.

Tất cả những điều được đề cập ở trên có thể được thực hiện hoàn toàn trong Shell Script. Nó chỉ phụ thuộc vào những gì bạn muốn và cách bạn muốn thực thi mã.


1
Cân nhắc sử dụng quoted form ofkhi xử lý các đường dẫn tệp. Điều này sẽ tránh các vấn đề với khoảng trắng, tên tệp chứa dấu ngoặc kép và ký tự thoát.
Graham Miln

ban đầu nó ở trong đó nhưng có vẻ như tôi đã gỡ bỏ nó khi phá mã. sẽ chỉnh sửa.
ʀ2ᴅ2

1

Có, với một kịch bản shell

Bạn có thể viết một tập lệnh shell để làm những gì bạn muốn và gói nó trong quy trình làm việc của Automator.

Chỉ trong Automator, điều này là không thể. Máy tự động thiếu logic phân nhánh cần thiết để xác định khi nào dừng.

Tôi không biết bất kỳ phím tắt nào, ngoài việc thay đổi kích thước và nén các hình ảnh kích thước khác nhau cho đến khi chúng đáp ứng mục tiêu của bạn.

Điều này có thể được thực hiện với các công cụ tích hợp có trong macOS, chẳng hạn như sipsđể thay đổi kích thước hình ảnh và bashcho kịch bản logic.

Xem Giảm kích thước tệp hình ảnh xuống kích thước nhất định cho một câu hỏi liên quan chặt chẽ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.