2008-10-13 27 views
5

Giới thiệu tóm tắt:ImageMagick Reflection

convert (-size 585x128 gradient:) NewImage.png 

Làm thế nào để thay đổi trên lệnh ImageMagick nên phải mất chiều rộng và chiều cao từ một hình ảnh hiện tại? Tôi cần nó để duy trì một dòng lệnh.


chi tiết:

Tôi đang cố gắng để programatically tạo ra một hình ảnh phản chiếu sử dụng ImageMagick. Hiệu ứng tôi đang tìm kiếm là tương tự như những gì bạn sẽ thấy khi nhìn vào một vật thể ở rìa của một hồ nước. Có một chuỗi khá tốt về những gì tôi đang cố gắng làm here nhưng giải pháp không chính xác là những gì tôi đang tìm kiếm. Vì tôi sẽ gọi ImageMagick từ một ứng dụng C# .Net tôi muốn sử dụng một cuộc gọi mà không cần bất kỳ tệp tạm thời nào và trả về hình ảnh thông qua thiết bị xuất chuẩn. Cho đến nay tôi có điều này ...

convert OriginalImage.png (OriginalImage.png -flip -blur 3x5 \ 
    -crop 100%%x30%%+0+0 -negate -evaluate multiply 0.3 \ 
    -negate (-size 585x128 gradient:) +matte -compose copy_opacity -composite) 
    -append NewImage.png 

Điều này hoạt động tốt nhưng không cho tôi độ chính xác mà tôi đang tìm kiếm. Thay vì một phai màu trắng từ trên xuống dưới, nó cho tôi một sự phai mờ từ trên xuống dưới bên phải. Tôi đã thêm phần (-negate -evaluate multiply 0.3 -negate) để làm sáng nó thêm một chút vì tôi đã không nhận được phai mà tôi muốn. Tôi cũng không muốn có mã cứng trong kích thước của hình ảnh khi tạo gradient (-size 585x128 gradient:) Tôi cũng sẽ muốn giữ độ trong suốt của hình ảnh gốc nếu có thể.

Để đi đến stdout tôi có kế hoạch thay thế "NewImage.png" với "-"

+0

tôi có thể trả lời câu này khi tôi về nhà tối nay. Nhận xét để tôi có thể tìm lại câu hỏi trên trang người dùng của mình. – Sparr

+0

Tôi đã không đặt câu trả lời này bởi vì nó không trực tiếp giải quyết các ràng buộc mà bạn đã thể hiện, nhưng tôi nghĩ rằng đó là thông tin hữu ích (đặc biệt trong ngữ cảnh định hướng * nix): http://blogs.sun.com/constantin/ entry/presenting_images_and_screenshots_the – micahwittman

+0

Chỉ để tham khảo, đây là một kịch bản PHP sử dụng thư viện GD để làm những gì tôi tin rằng bạn muốn: http://reflection.corephp.co.uk – leek

Trả lời

1

Nếu bạn đang gọi nó từ C#, có lẽ bạn có thể nhận lấy kích thước hình ảnh trong C#. Sau đó gọi lệnh ImageMagick với

command = String.Format("convert bar %1x%2",img.Width,img.Height) 
+0

Tôi không muốn thực hiện một cuộc gọi riêng đến có được kích thước hình ảnh. Vì ImageMagick sẽ tải hình ảnh, tôi hy vọng có thể sử dụng lại thông tin kích thước. –

0

Bạn nên lấy hình ảnh hiện như một đầu vào, và tạo gradient cho mình sử dụng -fx thay vì sử dụng gradient giả dạng.

-1

Có thể điều này có thể giúp: Reflection under an image

#!/bin/sh 

gamma=$1 
source=$2 
destination=$3 
size=`identify -format "%wx%h" $source` 

convert $source \ 
    \(-size $size xc:none \ 
    \(\(-flip $source -crop $size+0+0 \) \ 
    -size $size gradient: -gamma $gamma \ 
    -compose copy_opacity -composite \) \ 
    -compose blend -composite \) \ 
    -append $destination