Làm cách nào tôi có thể phân chia hình ảnh dựa trên các dòng chia này bằng [ImageMagick?]
Có thể cho rằng, giải pháp đơn giản nhất có thể là sử dụng -mùa vụ như vậy
convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%02d.jpg
Lệnh này:
Chia mỗi hình ảnh thành 6 (khoảng) gạch kích thước bằng nhau ( -crop 3x2 @ ), đánh số từng cái theo thứ tự.
Bắt đầu trình tự đánh số tại 1
( -cảnh 1 ), thay vì 0
.
Cho các số cuối cùng a 0
-đệm %02d
) trong các chữ số đơn [ 01-09
].
Ghi chú lệnh
Mặc dù có thể chỉ định kích thước chính xác (ví dụ: 1000x1000
) hoặc sử dụng tỷ lệ phần trăm (ví dụ: 33%x50%
) cho một vụ mùa gạch, điều này có khả năng cũng có thể tạo ra hình ảnh "cắt xén" (có thể không mong muốn).
Sử dụng ví dụ -3x2@
thường tạo các hình ảnh có kích thước gần hơn (so với nhau) so với tỷ lệ phần trăm "quá mức" (ví dụ: 33.4%x50%
) để tránh tạo ra hình ảnh "cắt tỉa".
Trong một tệp bó, bạn sẽ cần tăng gấp đôi số phần trăm để chúng hoạt động như dự định:
convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%%02d.jpg
Nếu bạn đang viết vào các định dạng có thể có offset hình ảnh / canvas (ví dụ: .png
), bạn có thể muốn bao gồm + sửa chữa phía sau của cậu -crop
:
convert -crop 3x2@ +repage -scene 1 image1.jpg image2.jpg cropped_%02d.png
Nếu các định dạng đầu vào của bạn có thể chứa phần bù hình ảnh / canvas, bạn có thể muốn +repage
những cái đó là tốt
Đổi tên
Có thể tự động đánh số chúng dựa trên thứ tự được mô tả ở trên không?
Chỉ riêng với ImageMagick, tôi đã không thể làm như vậy (tôi nghi ngờ điều đó có khả năng là không thể, nhưng thực lòng tôi không chắc về điều này). Tất nhiên, tách biệt với ImageMagick, điều này là hoàn toàn có thể.
Vì bạn đã gắn thẻ câu hỏi này với batch
, đáng nói đến có lẽ tôi không thể giúp với bất kỳ giải pháp tốt nào trong đợt. Với ý nghĩ đó, có vẻ như rất có thể bạn (hoặc người khác) có thể nghĩ ra thứ gì đó tốt hơn những gì tôi trình bày chi tiết dưới đây.
Batch bắt buộc (Không-) Trả lời
Đổi tên bằng vũ lực là có thể với lô. Đầu tiên, tạm thời đổi tên mọi tệp (ngoại trừ tệp đầu tiên và cuối cùng), ví dụ:
rename cropped_02.jpg cropped_02_temp.jpg
[...]
rename cropped_11.jpg cropped_11_temp.jpg
Sau đó đổi tên chúng trở lại vị trí mới, ví dụ:
rename cropped_02_temp.jpg cropped_03.jpg
rename cropped_03_temp.jpg cropped_05.jpg
rename cropped_04_temp.jpg cropped_07.jpg
rename cropped_05_temp.jpg cropped_09.jpg
rename cropped_06_temp.jpg cropped_11.jpg
rename cropped_07_temp.jpg cropped_02.jpg
rename cropped_08_temp.jpg cropped_04.jpg
rename cropped_09_temp.jpg cropped_06.jpg
rename cropped_10_temp.jpg cropped_08.jpg
rename cropped_11_temp.jpg cropped_10.jpg
Batch có khả năng lấy các đối số từ dòng lệnh và làm toán, cũng như sở hữu for
vòng lặp và if
báo cáo, vv để giải pháp này có thể (rõ ràng) được cải thiện theo.
Đổi tên ghi chú
Nếu bạn nhìn vào nửa sau của quá trình đổi tên ở trên, bạn sẽ nhận thấy một mẫu trong tên tệp. Thực tế, đối với một Vị trí N nhất định, chúng tôi có thể sử dụng một trong hai công thức sau để tìm vị trí mới của một mục trong sơ đồ của bạn:
- Các mục lên đến điểm "nửa chừng" (ví dụ: 2-6):
(Position_N * 2) - 1
- Các mục nằm ngoài điểm "nửa chừng" (ví dụ: 7-11):
(Position_N * 2) - Total_Items
Lưu ý: Mặc dù có thể áp dụng các công thức này cho toàn bộ chuỗi (ví dụ: 1 và 12), các mục đầu tiên và cuối cùng không bao giờ thay đổi vị trí. Điều này được cho là làm cho việc đổi tên chúng không cần thiết.
Hơn nữa, chúng nên hoạt động cho bất kỳ cũng (không lẻ) số mục / vị trí (4 hoặc cao hơn), giả sử tên tệp của bạn theo thứ tự (ví dụ: 1 đến 12). Vì vậy, cho các ví dụ ban đầu của bạn:
Temp Item 2 becomes (2 * 2) - 1 = Item 3
Temp Item 7 becomes (7 * 2) - 12 = Item 2
Temp Item 8 becomes (8 * 2) - 12 = Item 4
[...]
Do đó, các công thức được đưa ra có khả năng là cơ sở cho các giải pháp bó (hoặc tập lệnh khác). Tuy nhiên, có một vài điều khác cần lưu ý nếu bạn quyết định sử dụng chúng như vậy ...
Sắp xếp
Sắp xếp (như đã nói ở trên) có thể có những hậu quả thực tế trong những thứ như tập lệnh, vì các mục được Windows trả lại "không theo thứ tự" sẽ "phá vỡ" các công thức đã cho. Đặc biệt:
Windows sắp xếp tên trong từ điển đặt hàng theo mặc định. Điều này có nghĩa là các mặt hàng không có 0
ở phía trước các chữ số đơn (ví dụ: hình ảnh_1.jpg so với hình ảnh_01.jpg ) sẽ không xuất hiện theo thứ tự (tự nhiên) khi được Windows trả lại trực tiếp. Đó là, họ sẽ được trả lại như ví dụ:
cropped_1.jpg, cropped_10.jpg, cropped_11.jpg, cropped_12.jpg, cropped_2.jpg, etc.
Một số từ và cụm từ nhất định (như - Copy
) trong tên tệp cũng có thể ảnh hưởng đến thứ tự trả lại tên tệp.
Nếu bạn sử dụng các công thức trên, hãy đảm bảo 0
-pad một chữ số trong tên tệp của bạn và xóa những thứ như - Copy
(hoặc nói cách khác là thực hiện các bước để giảm thiểu những vấn đề này).
Vòng lặp / Bộ đếm bắt đầu bằng 0
Nếu bạn đang sử dụng một ngôn ngữ bắt đầu đếm bằng 0
(ví dụ: trong các vòng lặp), thì điều này có thể thay đổi công thức một chút:
- Các mục lên đến điểm "nửa chừng" (ví dụ: 1-5):
(Position_N * 2)
- Các mục nằm ngoài điểm "nửa chừng" (ví dụ: 6-10):
(Position_N * 2) - (Total_Items - 1)
Hãy nhớ rằng, đếm từ 0, 12 mục sẽ chạy 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
.
Tập lệnh Python
Nếu bạn quan tâm, tôi đã viết một bài nhỏ, (có thể khủng khiếp) Kịch bản Python đối với Python 3.x (được thử nghiệm với 3.6.4), có thể được sử dụng từ dòng lệnh để đổi tên các tệp tùy ý theo thứ tự (ví dụ: cropping_01.jpg ... cropping_XX.jpg ) theo thứ tự được chỉ định trong câu hỏi của bạn. Bạn sẽ cần đến có một bản sao của Python cài đặt nếu bạn quyết định dùng thử.
Hạn chế
Không đọc từ tệp văn bản để biết thông tin (vì vậy không chỉ định danh sách tệp tại thời điểm này). Tương tự như vậy, một tiền tố tên hình ảnh / tập tin và phần mở rộng được yêu cầu tại dòng lệnh.
Như vậy, tập lệnh hy vọng tên tệp sẽ được trả về đúng thứ tự tự động (xem Windows và 0
-Bộ đệm, ở trên).
Có một tùy chọn để sử dụng mô-đun của bên thứ ba được gọi là natsort
(được cài đặt với ví dụ: python -m pip install natsort
) nếu mặt hàng của bạn không 0
-Bộ đệm. Tuy nhiên, bạn cần bỏ dòng 13 ( from natsort import natsorted
) và dòng 105 ( item_list = list(natsorted(item_list))
) trong tập lệnh sau khi cài đặt natsort
để sử dụng tùy chọn này.
Để rõ ràng, "uncomment" có nghĩa là loại bỏ #
và không gian hàng đầu ở đầu dòng. Hướng dẫn bổ sung về cách sử dụng được bao gồm trong kịch bản.