2012-02-23 26 views
5

PHP tôi có thể làm điều đó một cách dễ dàng trong hệ điều hành của tôiHãy một GIF động với ImageMagick API

convert -delay 1/1 -loop 0 *.gif animated.gif 

Nhưng tôi không thể tìm thấy làm thế nào để làm điều này trong API PHP. Không thay đổi kích cỡ hoặc bất cứ thứ gì cần thiết, tôi vừa có một bộ khung hình cần làm động.

+0

Để bắt đầu, bạn có thể sử dụng [toán tử thực thi] (http://php.net/manual/en/language.operators.execution.php) (backticks): '\' convert -delay 1/1 -loop 0 * .gif animated.gif \ ''. – hakre

+0

hoặc 'exec()' nhưng điều đó rất lộn xộn và tôi đã nói rằng tôi muốn sử dụng API – jdborg

+0

Vâng, đó là một nhận xét nhiều hơn câu trả lời thực tế. Hướng dẫn sử dụng nói gì? Nó sẽ cung cấp một giao diện tôi nghĩ. – hakre

Trả lời

13

Mặc dù tôi không phải là chuyên gia về PHP, tôi biết rằng vấn đề này không phải là vấn đề quá khó. Những gì bạn muốn làm là tạo ra một đối tượng Imagick mà bạn có thể thêm khung của bạn vào. Với mỗi khung hình, bạn có thể thay đổi các thông số như thời gian, vv ..

Giả sử bạn đang làm việc với hình ảnh được tải lên từ biểu mẫu web cơ bản, tôi đã viết một ví dụ cơ bản lặp lại thông qua hình ảnh được tải lên với tên " image0 ", trong đó" 0 "đi lên đến tuy nhiên nhiều tệp được bao gồm. Bạn có thể tự nhiên chỉ cần thêm hình ảnh bằng cách sử dụng cùng một phương pháp trên tên tập tin cố định hoặc bất cứ điều gì.

$GIF = new Imagick(); 
$GIF->setFormat("gif"); 

for ($i = 0; $i < sizeof($_FILES); ++$i) { 
    $frame = new Imagick(); 
    $frame->readImage($_FILES["image$i"]["tmp_name"]); 
    $frame->setImageDelay(10); 
    $GIF->addImage($frame); 
} 

header("Content-Type: image/gif"); 
echo $GIF->getImagesBlob(); 

Ví dụ này tạo đối tượng Imagick là thứ sẽ trở thành GIF của chúng tôi. Các tệp đã được tải lên máy chủ sau đó được lặp qua và mỗi tệp được đọc trước tiên (hãy nhớ rằng kỹ thuật này dựa vào hình ảnh được đặt tên như tôi đã mô tả ở trên), thứ hai sẽ nhận được giá trị trễ và thứ ba được thêm vào GIF-to-be. Đó là ý tưởng cơ bản, và nó sẽ tạo ra những gì bạn đang theo đuổi (tôi hy vọng).

Nhưng có nhiều thứ để làm xáo trộn và cấu hình của bạn có thể trông khác. Tôi luôn tìm thấy tài liệu tham khảo php.net Imagick API đối với loại suck, nhưng nó vẫn còn tốt đẹp để có và tôi sử dụng nó tất cả bây giờ và sau đó để tham khảo những thứ từ ImageMagick tiêu chuẩn.

Hy vọng điều này phần nào phù hợp với những gì bạn đã làm sau.

+0

+1 cho câu trả lời bằng văn bản nhưng nó dường như không hoạt động. Tôi đang tạo một mảng các tập tin và sau đó lopping trên mỗi mã bạn đã làm (và ví dụ cuối cùng ở đây http://www.php.net/manual/en/imagick.addimage.php) nhưng tất cả những gì tôi thấy là hình ảnh cuối cùng. Ngay cả khi tôi đặt 500ms và đợi. Tôi muốn lặp lại và không thể tìm thấy điều đó. – jdborg

+0

Ah, công việc này nếu bạn sử dụng writeImages thay vì sau đó echo. Mặc dù tôi thích nghe. Ý tưởng nào? – jdborg

+0

Cái xấu của tôi, tôi đã quên một chi tiết quan trọng ở đó, chỉnh sửa câu trả lời :) Phương thức getImagesBlob() tương ứng với việc thiết lập đối số thứ hai trong writeImages() thành true. Và điều này sẽ lặp lại một GIF động dưới dạng blob, nó sẽ hoạt động. – fredrikekelund

Các vấn đề liên quan