jpg - save figure matlab png
¿Cómo guardar la figura de MATLAB como JPEG usando saveas() sin que la imagen salga mal? (3)
El cuadro de diálogo de exportación de figura de Matlab y la función saveas()
carecen de una gran cantidad de funcionalidades deseables. Especialmente, savas()
no puede crear una imagen de resoultion personalizada por lo que sus resultados se ven pobres. Para la creación de imágenes de mapas de bits, recomiendo usar la función de terceros export_fig . Al agregar el siguiente código a su función (incluido el truco de maximización)
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
Creé esta imagen: (use "mostrar imagen" o similar en su navegador para obtener el tamaño original)
Para una mayor calidad, use resoluciones más altas de 150 o incluso 300 ppp (para imprimir). En lugar de maximizar la ventana de figura, para la mayoría de las aplicaciones es adecuado definir el tamaño del eje 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
En una función de MATLAB, escribo, estoy generando una figura. La figura se muestra cuando se ejecuta la función. Necesito guardar la figura como una imagen JPEG. Para hacer eso, podría hacer Archivo-> Guardar como en la ventana de la figura que muestra la figura. Pero me gustaría automatizar esto. Intenté hacer eso usando la función saveas (). El problema es que la imagen resultante no es deseable. Aquí están las imágenes de un problema de demostración para mostrar lo que quiero decir:
Imagen JPEG guardada manualmente usando Archivo-> Guardar como en la ventana de figura de MATLAB:
Imagen JPEG guardada con la función saveas () (observe que las tramas no son tan agradables y los títulos se superponen):
Aquí está la función MATLAB en la que genero la figura y guardo la figura como JPEG usando 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 se ejecuta JpgSaveIssueDemo () no está maximizada. Entonces, pensé que si podía maximizar usando llamadas de función en JpgSaveIssueDemo () antes de ejecutar saveas (), la imagen JPEG guardada saldría bien.
Entonces, utilicé este código antes de la línea saveas () en JpgSaveIssueDemo () para maximizar la figura:
drawnow;
jFrame = get(handle(gcf),''JavaFrame'');
jFrame.setMaximized(true);
Entonces, la figura que se muestra se maximiza. Sin embargo, el resultado es el mismo: la imagen JPEG sigue saliendo indeseablemente.
¿Qué se puede hacer por esto?
Simplemente use un formato escalable sin pérdidas como EPS, consulte 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
Sin embargo, aquí no puedo adjuntar un archivo EPS, no es compatible, pero es escalable y puede colocarse en procesadores de texto o látex sin preocuparse por la mala resolución.
Tuve el mismo problema, y aquí está lo que solía resolver:
set(gcf,''PaperPositionMode'',''auto'') saveas(gcf,''file_to_save'',''png'')
donde gcf
puede ser reemplazado por el mango a la figura deseada.