En una función de MATLAB que estoy escribiendo, estoy generando una figura. La figura que se muestra cuando se ejecuta la función. Necesito guardar la figura como una imagen JPEG. Para hacer eso, yo podría hacer de Archivo->Guardar Como en la figura de la ventana que muestra la figura. Pero me gustaría automatizar este proceso. He tratado de hacer que el uso de la saveas() función. El problema es que la imagen resultante no es deseable. Aquí están las imágenes para ver una demostración problema para mostrar lo que quiero decir:

De imagen JPEG guardados manualmente usando Archivo->Guardar Como en el MATLAB figura ventana:
Cómo guardar MATLAB figura como JPEG utilizando saveas() sin la imagen saliendo mal?

De Imagen JPEG se guardan mediante saveas () (función de aviso de que las parcelas no son tan bonitas, y los títulos de superposición):
Cómo guardar MATLAB figura como JPEG utilizando saveas() sin la imagen saliendo mal?

Aquí es la función de MATLAB en el que puedo generar la figura y guardar la figura como un archivo JPEG utilizando saveas():

function JpgSaveIssueDemo( )
    figure( 1 );
    t = 0:0.1:8;    

    subplot( 2, 2, 1 );    
    plot( t, sin(t) );
    title( 'Plot 1 of Example to Demonstrate JPG Save Issue', 'FontSize', 18 );

    subplot( 2, 2, 2 );
    plot( t, sin(t) );
    title( 'Plot 2 of Example to Demonstrate JPG Save Issue', 'FontSize', 18 );

    subplot( 2, 2, 3 );
    plot( t, sin(t) );
    title( 'Plot 3 of Example to Demonstrate JPG Save Issue', 'FontSize', 18 );

    subplot( 2, 2, 4 );
    plot( t, sin(t) );
    title( 'Plot 4 of Example to Demonstrate JPG Save Issue', 'FontSize', 18 );

    saveas( gcf, 'DemoPlot', 'jpg' );
end

La figura que se muestra cuando JpgSaveIssueDemo() se ejecuta no está maximizada. Entonces, pensé que si podía maximizar el uso de la función de llamada/s en JpgSaveIssueDemo() antes de saveas() es ejecutado, a continuación, el archivo de imagen JPEG guardados saldría bien.

Así, he utilizado este código antes de la saveas() de la línea en JpgSaveIssueDemo() para maximizar la figura:

drawnow;
jFrame = get(handle(gcf),'JavaFrame'); 
jFrame.setMaximized(true);

Entonces, la figura que se muestra es maximizada. Sin embargo, el resultado es el mismo: la imagen JPEG todavía sale indeseable.

¿Qué se puede hacer para esto?

  • Solución parcial: Jpg es el tipo equivocado de imagen para este. Las plazas de basura, cerca de la línea en la imagen, son jpg artefactos de compresión. El uso de jpg para cosas como las fotografías, utilice png para cosas como gráficos. El formato png le dará la mejor calidad y un menor tamaño de archivo.
InformationsquelleAutor GigaRohan | 2013-04-13

3 Comentarios

  1. 20

    Matlab figura cuadro de diálogo de exportación y el saveas() función de la falta de una gran cantidad de funcionalidad deseable. Especialmente, savas() no se puede crear una personalizada resoultion imagen es por ello que sus resultados son pobres. Para la creación de imágenes de mapa de bits recomiendo el uso de la tercera parte de la función export_fig. Agregando el código siguiente a la función (incluyendo la maximización de truco)

    set(gcf, 'Color', 'white'); % white bckgr
    export_fig( gcf, ...      % figure handle
        'Export_fig_demo',... % name of output file without extension
        '-painters', ...      % renderer
        '-jpg', ...           % file format
        '-r72' );             % resolution in dpi

    He creado esta imagen: (de uso «mostrar imagen» o similar en su navegador para ver el tamaño original)

    Cómo guardar MATLAB figura como JPEG utilizando saveas() sin la imagen saliendo mal?

    Para una mayor calidad de uso mayor de las resoluciones de 150 o 300 dpi (para imprimir). En lugar de maximizar la figura de la ventana, para la mayoría de las aplicaciones es adecuado para definir el eje de tamaño para obtener una imagen del tamaño deseado:

    unitSave = get(figureHandle, 'Unit');                % store original unit
    set(figureHandle, 'Unit', 'centimeters');            % set unit to cm
    set(figureHandle,'position',[0 0 width height]);     % set size
    set(figureHandle, 'Unit', unitSave);                 % restore original unit
  2. 4

    Sólo tiene que utilizar un lossless escalable formato EPS, véase la última línea en el siguiente fragmento 🙂

    h1=figure % create figure
    plot(t,Data,'r');
    legend('Myfunction');
    
    % Create title with required font size
    title({'Variance vs distance'},'LineWidth',4,'FontSize',18,...
    'FontName','Droid Sans');
    
    % Create xlabel with required font size
    xlabel({'Distance (cm)'},'FontSize',14,...
    'FontName','DejaVu Sans');
    
    % Create ylabel with required font size
    ylabel({'Variance of sobel gradients'},'FontSize',14,...
    'FontName','DejaVu Sans');
    
    print(h1,'-depsc','autofocus.eps') % print figure to a file

    No puedo adjuntar un archivo EPS aquí, sin embargo, no se admite, pero su escalable y se puede poner en los procesadores de texto o de Látex sin tener que preocuparse acerca de una mala resolución.

  3. 1

    Tuve el mismo problema, y he aquí lo que se utiliza para resolverlo:

    set(gcf,'PaperPositionMode','auto')
    saveas(gcf,'file_to_save','png')

    donde gcf puede ser reemplazado por el mango a la figura deseada.

Dejar respuesta

Please enter your comment!
Please enter your name here