Hình thu nhỏ vuông với ImageMagick (chuyển đổi)?


Câu trả lời:


19

Điều này được giải thích trong tài liệu chính thức của ImageMagick bên dưới, Cắt Cắt hình thu nhỏ cho Fit phù hợp :

Một cách khác, thay vì bỏ hình ảnh để phù hợp với kích thước hình thu nhỏ cụ thể mà chúng ta muốn, thay vào đó là cắt bỏ các phần của hình ảnh không phù hợp với kích thước cuối cùng.

Tất nhiên điều này có nghĩa là bạn thực sự mất một số phần của hình ảnh gốc, đặc biệt là các cạnh của hình ảnh, nhưng kết quả là một hình thu nhỏ được phóng to của phần trung tâm của hình ảnh. Đây thường là (nhưng không phải luôn luôn) chủ đề chính của hình ảnh, vì vậy nó là một phương pháp thực tế để tạo hình thu nhỏ.

Kể từ IM v6.3.8-3, cờ tùy chọn thay đổi kích thước đặc biệt '^' đã được thêm vào để làm cho việc này dễ dàng hơn. Chúng tôi chỉ thay đổi kích thước bằng cách sử dụng cờ này sau đó cắt bỏ các phần của hình ảnh tràn ra kích thước mong muốn.

Và trong ngữ cảnh của một lệnh ví dụ:

convert -define jpeg:size=200x200 hatching_orig.jpg  -thumbnail 100x100^ \
          -gravity center -extent 100x100  cut_to_fit.gif

7
Có thể ... một số loại mô tả?
Hello71

Tôi yêu câu trả lời trống của Ignacio :-)
Ciro Santilli 心 心 事件

55

Ignacio được liên kết với tài liệu chính xác, tuy nhiên tôi sẽ dán nó vào đây để thuận tiện:

convert -define jpeg:size=200x200 original.jpeg  -thumbnail 100x100^ -gravity center -extent 100x100  thumbnail.jpeg

Tương tự, phần sau đây dành cho GraphicsMagick:

gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg

Giải trình:

  • -size 200x200 nói với bộ giải mã jpeg chúng ta chỉ cần độ phân giải này để nó có thể lưu bộ nhớ và đọc hình ảnh nguồn nhanh hơn
  • -thumbnail 100x100^ nhanh chóng thay đổi kích thước làm cho bên ngắn nhất 100
  • - gravity center trung tâm hoạt động tiếp theo
  • -extent 100x100 áp dụng hình ảnh cho khung vẽ 100x100
  • +profile "*" không lưu bất kỳ metainfo nào vào jpeg (làm cho hình ảnh thu được nhỏ hơn)

3
Khi tôi sử dụng nó trong dòng lệnh (đồ họa ảo thuật) tôi có hình ảnh ở giữa, hai con người chứa đầy màu trắng. Không phải là một mô tả trong câu hỏi. Tôi có làm điều gì sai?
Umut Benzer

2
Nếu bạn đang sử dụng windows, bạn phải nhân đôi ký tự ^ để thoát nó. Ví dụ: -thumbnail 100x100 ^^
George Filippakos

3
Tại sao không phải kích thước 100x100?
Xin chào thế giới

@HelloWorld: Đọc "Hình học Tưởng tượng". Google nó, nó sẽ dễ dàng tìm thấy.
saurabheights

11

Đó là một cách đơn giản hơn để làm điều đó:

Lệnh sau thay đổi kích thước cạnh nhỏ hơn thành 100 pixel và cắt hình vuông 100x100. Bạn có thể thêm một -striplệnh để giảm kích thước tập tin.

convert original.jpg -resize "100^>" -gravity center \ 
                     -crop 100x100+0+0 -strip thumbnail.jpg

Không giống như những người khác, nó không cố gắng tiết kiệm bộ nhớ. Thay vào đó, nó làm những gì bạn muốn, và không còn nữa. Thêm vào đó, nó sẽ không cao cấp hình ảnh.


Khi thêm một câu trả lời muộn cho một câu hỏi với các câu trả lời đã được thiết lập, sẽ rất hữu ích khi cung cấp đủ lời giải thích tại sao câu trả lời của bạn cung cấp một cái gì đó độc đáo và mới so với các câu trả lời khác.
Jason Aller

2
Cảm ơn, tôi không biết tại sao những người khác lại quá lạm dụng câu trả lời của họ để cố gắng tiết kiệm bộ nhớ khi OP không đề cập gì về điều này.
bối

2

Tôi đang sử dụng đồ họa để tạo hình thu nhỏ có kích thước chính xác nhưng tôi đang đệm hình ảnh bằng một bàn cờ thay vì cắt xén phần nhô ra.

gm convert -limit Threads 1 -size 320x180 pattern:checkerboard -background transparent -gravity center -resize 320x180 -extent 320x180 original.jpg -flatten -resize 112x65! -interlace Line 1 thumb_112x65.jpg

Tùy chọn giải thích.

gm convert

// Single threaded seems faster on smaller files
-limit Threads 1 

// Generate a checkerboard of size 320x180.
// Sets the relative size of the checkerboard squares,
// also sets the desired aspect ratio. In my case (16:9)
-size 320x180 pattern:checkerboard 

// Resize the input image and center it on a transparent layer.
-background transparent -gravity center -resize 320x180 -extent 320x180 orig.jpg

// Merge the layers
-flatten 

// Resize the output to the desired
// The ! causes the aspect ratio to be ignored, fixing any rounding errors.
// (Specify a size with the same aspect ratio as the checkerboard.)
-resize 112x65! 

// Use Progressive JPEG Encoding
-interlace Line 

// Output Image
thumb_112x65.jpg

1

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như:

convert -crop 100x100+50+50 input_image.jpg output_image.jpg 

nơi 100x100kích thước của hình chữ nhật cuối cùng và 50x50sự bù đắp .


Đó là hình ảnh cắt, nhưng không tạo hình thu nhỏ.
marioosh

1
@marioosh: Tôi không hiểu, bạn có thể sử dụng convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg, để biết thêm thông tin, hãy kiểm tra phản hồi của Igancio Vazquez để biết ví dụ hoặc kiểm tra tài liệu
pconcepcion

1

Lệnh này cắt thành hình vuông và sau đó thay đổi kích thước thành 150x150

convert 824-full.jpg -set option:size '%[fx:min(w,h)]x%[fx:min(w,h)]' xc:none +swap -gravity center -composite -resize 150x150  temp.jpg

Các tùy chọn khác có sẵn tại đây: http://www.imagemagick.org/Usage/thumbnails/#sapes

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.