chia hình ảnh jpg theo tỷ lệ nhất định (hình ảnh)


0

Tôi có một loạt các hình ảnh được quét vào định dạng jpg. Như bạn thấy trong các hình ảnh dưới đây, các thẻ có hai mặt, khi quét tôi đã đặt 6 thẻ bên trong máy quét.

Mặt trước của thẻ thứ nhất được đánh số 1 trong hình bên dưới và mặt sau của nó được đánh số 7. Mặt trước của thẻ thứ hai được đánh số 2 và mặt sau của nó được đánh số 8, v.v.

Những gì tôi muốn thực hiện: Để phân chia các tệp này (image1.jpg và image2.jpg) theo cách mà tôi sẽ có một thư mục chứa các thẻ riêng lẻ theo thứ tự như sau:

1.jpg(1)
2.jpg(7) (since 7 is the back side of the 1.jpg) 

3.jpg(2)
4.jpg(8)
etc

(image1.jpg) Mặt trước của sáu thẻ: Front side of the Cards

(image2.jpg) Mặt sau của sáu thẻ: Back side of the cards

1- 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 hình ảnh (hoặc bất kỳ giải pháp nào khác)? (Tôi có thể lấy x và y của các dòng này vì tất cả các hình ảnh là 2550x3507)

đường phân chia có màu đỏ: Divider Lines are in red

  1. sau khi chia tách hoặc trong quá trình chia tách, có thể tự động đánh số chúng dựa trên thứ tự mong muốn được mô tả ở trên không?

Câu trả lời:


1

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.


Kịch bản python của bạn không hoạt động, mặc dù phần đầu tiên của câu trả lời đã làm công việc mà tôi cần
acman123

Hmm ... Vâng, tôi rất vui vì ít nhất một số câu trả lời đã có hiệu quả! = P
Anaksunaman
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.