2011-11-19 28 views
9

GIMP cho phép bạn tạo plugin bằng Python, điều tôi muốn làm là gọi hàm GIMP như tôi sẽ làm bên trong một trong các plugin này nhưng điều này trả về lỗi sau vì GIMP không tìm thấy bất kỳ GIMP Core đang chạy nào để sử dụng .Làm thế nào để sử dụng GIMP bên trong một tập lệnh Python?

LibGimpBase-ERROR **: gimp_wire_write_msg: the wire protocol has not been initialized aborting... 

Tôi muốn biết nếu có thể? Và nếu có, làm thế nào?

Cảm ơn

+0

Bắt đầu một thể hiện của GIMP sử dụng module 'subprocess' trước khi kịch bản của bạn bắt đầu làm công việc của mình? –

+0

có thể trùng lặp của [Kết nối GIMP với PHP hoặc Python] (http: // stackoverflow.com/questions/3237252/connect-gimp-with-php-or-python) – unutbu

+1

Tôi nghĩ rằng, nó không phải là một bản sao kể từ khi tôi yêu cầu một cách rõ ràng làm thế nào để thực hiện nó mà không cần sử dụng plugin. Tôi đã thử các cuộc gọi subprocess nhưng tôi nghĩ rằng sẽ thất bại. – AsTeR

Trả lời

11

Phần mở rộng Python của GIMP cần phải được chạy từ bên trong một trường hợp GIMP. Nếu bạn muốn sử dụng GIMPś API từ Python, bạn phải chạy GIMP không có giao diện đồ họa (chuyển thông số -i từ dòng lệnh) và chạy lệnh gọi tới api - với tham số dòng lệnh -b - vì vậy, bạn có thể chạy chương trình python_fu_do_it của bạn, từ sự kêu gọi dòng lệnh:

gimp -i -b \(python-fu-do-it \) 

Lưu ý rằng đây là cách duy nhất để có được phần mở rộng gimp-python chạy: bạn phải chạy nó từ bên trong một quá trình GIMP. Trong thực tế, một điều hữu ích để làm có thể là làm cho gimp-plugin của bạn phơi bày một số chức năng thực hiện hành động trên hình ảnh mà bạn muốn, và xuất chúng qua máy chủ xmlrpc hoặc jsonrpc - dễ dàng thực hiện bằng Python. Sau đó, bạn bắt đầu "máy chủ hình ảnh" này bằng cách sử dụng phương pháp trên và tạo tập lệnh python độc lập, gọi hàm gimp của bạn thông qua xmlrpc.

+1

Nó cũng nghĩ về cách tiếp cận đó. Bạn có thể xác nhận rằng đây là 100% chắc chắn không có cách nào để sử dụng GIMP bên trong Python thay vì sử dụng Python bên trong GIMP? – AsTeR

+1

Là một trong những người đóng góp cho mã đó, tôi xác nhận nó cho bạn. – jsbueno

+0

@jsbueno là có cách nào cho phép điều này để có thể một ngày nào đó? – magnetar

-3

Tôi phải nói rằng sau tuyên bố là không đúng sự thật: "phần mở rộng Python GIMP cần phải được chạy từ bên trong một trường hợp GIMP"

Bạn không phải chạy gimp để sử dụng các chức năng của nó được hiển thị thông qua API gimpfu python.

Trong bất cứ chương trình python, cho linux bạn chỉ cần làm như sau:

import sys 
sys.path.append('/usr/lib/gimp/2.0/python/') 
import gimpfu 

nơi '/usr/lib/gimp/2.0/python/' là đường dẫn đến gimp cài đặt.

Trân trọng, Karlo.

+0

Bạn đã thử một số "quy trình cơ bản": tải hình ảnh + thao tác + lưu? @ jsbueno nói với một cái gì đó khác và là một người đóng góp – AsTeR

+3

Sau khi tôi đã thử công việc cơ bản với các chức năng gọi pdb tôi đã nhận lỗi tương tự. Thêm gimp vào đường dẫn python không phải là giải pháp để chạy các hàm pdb mà không có gimp. Lỗi của tôi. –

+2

Bạn có thể nhập mô-đun, nhưng không có GIMP chạy, nó không hoạt động - thay vào đó, Python chấm dứt bằng "LibGimpBase-ERROR **: gimp_wire_write_msg: giao thức dây chưa được khởi tạo " – jsbueno

0

Một tùy chọn là tạo quy trình nghe bên trong gimp dưới dạng tập lệnh (Điều này có thể có liên quan đến việc khóa giao diện người dùng, thử nghiệm ở đây), sau đó nhận nó để nghe hàng đợi công việc beanstalkd. sau đó trong các quy trình bên ngoài của bạn, yêu cầu công việc lodge trên hàng đợi beanstalk và beanstalk sau đó có thể xử lý các đơn đặt hàng này ngoài quá trình. Với tất cả những gì đã nói, 99% trường hợp sử dụng tôi có thể tưởng tượng bạn muốn làm điều này, có lẽ ImageMagick sẽ là một lựa chọn phù hợp hơn gimp như loại thiết kế cho các nhiệm vụ mà tôi tưởng tượng bạn quan tâm .

+0

GIMP có thể được khởi chạy bằng dòng lệnh mà không cần Giao diện người dùng. Nó hoạt động tốt và bạn có thể đặt kịch bản của bạn trong đó để nghe công việc. – AsTeR