Search code examples
imagematlabimagemagickeps

MATLAB - write image into an eps file


In MATLAB, how do you write a matrix into an image of EPS format?

It seems imwrite does not support EPS.

Convert is not working on the Linux server I am using:

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

Why?


I tried gnovice's idea under terminal mode:

    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) ;

However I got:

??? Error using ==> imshow at 191
IMSHOW requires Java to run.

Error in ==> study_weaker at 122
imshow(img,'border','tight',... %# Display in a figure window without

191 error(eid,'%s requires Java to run.',upper(mfilename));

How can I fix it?


Solution

  • One possible solution is to plot your image using IMSHOW, then print the entire figure as a .eps using 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
    

    One drawback to this solution is that if the image is too big to fit on the screen, IMSHOW will shrink it to fit, which will reduce the on-screen resolution of the image. However, you can adjust the final resolution of the saved image using the -r<number> option for the PRINT function. For example, you can print your figure as an Encapsulated Level 2 Color PostScript with a resolution of 300 dpi by doing the following:

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

    EDIT: If you are unable to use IMSHOW (either because you don't have the Image Processing Toolbox or because you are using a MATLAB mode that doesn't allow it), here is an alternative way to create and print the figure:

    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
    

    You can also take a look at this documentation to see how printing works without a display.