imwrite
Writes an image, whose pixel data comes from a matrix, m, with functions defined in the omlimgtoolbox.
Syntax
imwrite(m, file)
imwrite(m, file, ext)
imwrite(m, ..., 'Alpha', alpha, 'DelayTime', delay, 'LoopCount', loops, 'Quality', quality, 'WriteMode', mode, ...)
Inputs
- m
- 2D or ND matrices with the pixel data for the image to write.
- file
- Name of the image file to write.
- ext (optional)
- Specifies the extension to use for the image file to be written. If this option is used, file should be the base name with no extension specified.
- alpha (optional)
- Name-value pair to specify the alpha channel of the image. If specified, the dimensions of alpha should be the same as m. If not specified, the image is considered to be opaque.
- delay (optional)
- Specifies the duration of each frame in a GIF file. A scalar value sets the same duration to all frames. A vector with length equal to the number of frames may be used to set the duration of each frame. The default value is 0.1sec.
- loops (optional)
- Specifies the number of times the frame sequence will be repeated in a GIF file. A value of 0 or 1 will show the sequence only once. The default value is Inf, it will be repeated infinite times.
- quality (optional)
- Name-value pair to specify the quality of the image written. Valid values are integers between 0 to 100, with 100 being of the highest quality. If not specified, the default value is 99.
- mode (optional)
- Name-value pair which specifies whether data needs to be appended or overwritten on an existing image file, file. Valid values are 'overwrite' and 'append', the default option being 'overwrite'.
Examples
Write an image with the default options:
m = imread('img_1640.jpg');
imwrite(m, 'oml_img_1640.jpg');
Overwrite an existing file with extension, alpha and
quality options:
[m, dummy, alpha] = imread('img_1640.png');
imwrite(m, 'oml_img_1640', 'png', 'Alpha', alpha, 'Quality', 85, 'WriteMode', 'overwrite');
Create a GIF file from figure frames:
clear all; close all; clc
% init plot
t = 0:0.1:4;
l = plot(t(1), sin(t(1)), 'bo', t(1), cos(t(1)), 'ro');
num_frames = length(t);
axis([0 max(t) -1 1]);
% Create the frames matrix
sz = size(getframe(gcf).cdata);
f = zeros(sz(1), sz(2), sz(3), num_frames);
% Plot animation
for k = 1:num_frames
set(l(1),{'xdata', 'ydata'},{t(k), sin(t(k))});
set(l(2),{'xdata', 'ydata'},{t(k), cos(t(k))});
% get a snapshot of the plot in each iteration
f(:,:,:,k) = getframe(gcf).cdata;
end
close(gcf)
% Export GIF with default options
imwrite(f, 'gifDefault.gif');
% Set the LoopCount to 2 - the sequence will be show once and repeated twice
imwrite(f, 'gifLoop2.gif', 'LoopCount', 2);
% Set the DelayTime to 0.5 for all frames
imwrite(f, 'gifDelay.gif', 'DelayTime', 0.5);
% Set a different DelayTime for each frame
delay = linspace(0.01,1,num_frames);
imwrite(f, 'gifDelayVec.gif', 'DelayTime', delay);
% Save frames separately to demonstrate the 'append' functionality
imwrite(f(:,:,:,1:10), 'gifAppend.gif');
% Append frames to existing GIF
imwrite(f(:,:,:,15:20), 'gifAppend.gif', 'WriteMode', 'append');
Comments
The valid options when exporting to a GIF file are 'DelayTime', 'LoopCount' and 'WriteMode'. All other options will be ignored.
Options 'DelayTime' and 'LoopCount' will be ignored when exporting to a file type other than GIF.
In GIF files 'overwrite' is a much faster operation than 'append' and should be preferred when possible.