2010-03-19 51 views
6

Trong MATLAB, làm thế nào để bạn viết một ma trận vào một hình ảnh của định dạng EPS?MATLAB - ghi hình ảnh vào một tập tin eps

Có vẻ như imwrite không hỗ trợ EPS.

Chuyển đổi không hoạt động trên máy chủ Linux Tôi đang sử dụng:

$ convert exploss_stumps.jpg exploss_stumps.eps 
convert: missing an image filename `exploss_stumps.eps' @ convert.c/ConvertImageCommand/2838 

Tại sao?


tôi đã cố gắng tưởng gnovice dưới chế độ thiết bị đầu cuối:

figH = figure('visible','off') ; 
imshow(img,'border','tight',...  %# Display in a figure window without 
     'InitialMagnification',100); %# a border at full magnification 
print(strcat(filepath,'/', dataset,'_feature_',num2str(j), '.eps'),'-depsc2'); 
    close(figH) ; 

Tuy nhiên tôi nhận:

??? Lỗi khi sử dụng ==> imshow tại 191
IMSHOW yêu cầu Java chạy.

Lỗi trong ==> study_weaker tại 122
imshow (img, 'biên giới', 'chặt', ...% # hiển thị trong một cửa sổ con số mà không

191 lỗi (eid, '% s đòi hỏi Java để chạy ', trên (mfilename));.

làm thế nào tôi có thể sửa chữa nó

+0

Hãy thử điều tương tự bằng SciPy? Lưu vào văn bản đầu tiên và sau đó sử dụng Asymptote hoặc chuyển đổi lệnh unix? –

+0

Cảm ơn! chuyển đổi không hoạt động tốt. – Tim

+0

Cũng lưu ý rằng bạn cũng có thể chạy ở chế độ "terminal" bằng Java. Chỉ cần bắt đầu MATLAB với cờ "-nodesktop" thay vì cờ "-nojava". –

Trả lời

6

một giải pháp khả thi là để vẽ hình ảnh của bạn sử dụng IMSHOW, sau đó in toàn bộ hình như một .eps sử dụng? PRINT:

img = imread('peppers.png');   %# A sample image 
imshow(img,'Border','tight',...  %# Display in a figure window without 
     'InitialMagnification',100); %# a border at full magnification 
print('new_image.eps','-deps');  %# Print the figure as a B&W eps 

Một hạn chế đối với giải pháp này là nếu hình ảnh quá lớn không vừa trên màn hình, IMSHOW sẽ thu nhỏ để vừa, điều này sẽ làm giảm độ phân giải của hình ảnh. Tuy nhiên, bạn có thể điều chỉnh độ phân giải cuối cùng của hình ảnh đã lưu bằng cách sử dụng -r<number> option for the PRINT function. Ví dụ, bạn có thể in hình của bạn như là một Encapsulated Level 2 Màu PostScript với độ phân giải 300 dpi bằng cách làm như sau:

print('new_image.eps','-depsc2','-r300'); 

EDIT: Nếu bạn không thể sử dụng IMSHOW (hoặc vì bạn không' t có Image Processing Toolbox hoặc bởi vì bạn đang sử dụng một chế độ MATLAB mà không cho phép nó), đây là một cách khác để tạo và in con số:

img = imread('peppers.png');  %# A sample image 
imagesc(img);      %# Plot the image 
set(gca,'Units','normalized',... %# Set some axes properties 
     'Position',[0 0 1 1],... 
     'Visible','off'); 
set(gcf,'Units','pixels',...  %# Set some figure properties 
     'Position',[100 100 size(img,2) size(img,1)]); 
print(gcf,'new_image.eps','-depsc2','-r300'); %# Print the figure 

bạn cũng có thể có một cái nhìn tại this documentation để xem cách công việc in ấn không có màn hình.

+1

Để tránh thay đổi độ phân giải, bạn có thể có được kích thước ma trận và chỉ định kích thước trục theo pixel. – yuk

+0

tốt hơn làm cho nó '-depsc2' – AVB

+0

@AB: Tùy chọn đó là tùy thuộc vào OP, dựa trên loại tệp .eps họ muốn/cần. – gnovice

0

Nó sẽ hoạt động khi sử dụng tính năng ghi đè. Bạn sẽ phải thêm một bản đồ màu để nó hoạt động.

Tuy nhiên, ckecking các trang trợ giúp tôi thấy rằng nó không thể sử dụng imwrite để viết một tập tin EPS.

+0

ví dụ, xin vui lòng? – Tim

0

Mã sau có thể giúp bạn chuyển đổi tệp png thành eps.

fileName = 'FarmerStats'; % your FILE NAME as string 

A = imread(fileName,'png'); 
set(gcf,'visible','off') %suppress figure 
image(A);     
axis image    % resolution based on image 
axis off     % avoid printing axis 
set(gca,'LooseInset',get(gca,'TightInset')); % removing extra white space in figure 
saveas(gcf,fileName,'epsc'); % save as COLOR eps file 
Các vấn đề liên quan