summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@centraldogma>2011-10-06 20:54:56 +0200
committercinap_lenrek <cinap_lenrek@centraldogma>2011-10-06 20:54:56 +0200
commit65e50862cf904f1b9051e9eeb87d6374625ca6ed (patch)
treee712317cafbf943fda2f2705b28bd9f5e700fe3f
parentd58a409a1215f3dce723768ed6489e979257741b (diff)
manpages for resize and rotate
-rw-r--r--sys/man/1/resample29
-rw-r--r--sys/man/1/rotate36
-rw-r--r--sys/src/cmd/resize.c28
3 files changed, 84 insertions, 9 deletions
diff --git a/sys/man/1/resample b/sys/man/1/resample
index 35968d054..391f4a654 100644
--- a/sys/man/1/resample
+++ b/sys/man/1/resample
@@ -1,6 +1,6 @@
.TH RESAMPLE 1
.SH NAME
-resample \- resample a picture
+resample, resize - resample a picture
.SH SYNOPSIS
.B resample
[
@@ -12,11 +12,27 @@ resample \- resample a picture
] [
.I file
]
+.br
+.B resize
+[
+.B -x
+.I size
+] [
+.B -y
+.I size
+] [
+.I file
+]
.SH DESCRIPTION
.I Resample
+and
+.I Resize
resamples its input image (default standard input) to a new size.
-The image is decimated or interpolated using
-a Kaiser window.
+.I Resample
+uses a Kaiser window which produces high quality results and
+.I resize
+uses bilinear interpolation which is faster but produces more
+fuzzy images.
.PP
The size of the resampled image can be specified
with the
@@ -24,7 +40,8 @@ with the
and
.B -y
options.
-An unadorned value sets the number of pixels of that dimension; a suffixed percent sign specifies a percentage.
+An unadorned value sets the number of pixels of that dimension; a
+suffixed percent sign specifies a percentage.
If only one of
.B -x
or
@@ -51,8 +68,8 @@ To uncompress the image or change the pixel format, use
.PP
.SH SOURCE
.B /sys/src/cmd/resample.c
+.br
+.B /sys/src/cmd/resize.c
.SH "SEE ALSO
.IR crop (1),
.IR image (6)
-.SH BUGS
-Faster algorithms exist, but this implementation produces correct pictures.
diff --git a/sys/man/1/rotate b/sys/man/1/rotate
new file mode 100644
index 000000000..498e02fda
--- /dev/null
+++ b/sys/man/1/rotate
@@ -0,0 +1,36 @@
+.TH ROTATE 1
+.SH NAME
+rotate - rotate or mirror a picture
+.SH SYNOPSIS
+.B rotate
+[
+.B -r
+.I degree
+] [
+.B -u |
+.B -l
+] [
+.I file
+]
+.SH DESCRIPTION
+.I Rotate
+reads its input image (default from standard input), applies the rotation
+or mirroring and outputs the transformed image in compressed
+plan9 bitmap format.
+.PP
+The option
+.B -r
+rotates the image clockwise in 90 degree steps by the
+.I degree
+argument.
+The options
+.B -u
+and
+.B -l
+mirror the image upside/down or left/right.
+.SH SOURCE
+.B /sys/src/cmd/rotate.c
+.SH "SEE ALSO
+.IR crop (1),
+.IR resample (1),
+.IR image (6)
diff --git a/sys/src/cmd/resize.c b/sys/src/cmd/resize.c
index a66cd90c7..626097eeb 100644
--- a/sys/src/cmd/resize.c
+++ b/sys/src/cmd/resize.c
@@ -70,10 +70,25 @@ resample(Memimage *dst, Rectangle r, Memimage *src, Rectangle sr)
}
}
+enum {
+ PERCENT = 0x80000000,
+};
+
+static int
+getsize(char *s)
+{
+ int v;
+
+ v = strtol(s, &s, 10) & ~PERCENT;
+ if(*s == '%')
+ v |= PERCENT;
+ return v;
+}
+
void
usage(void)
{
- sysfatal("Usage: %s [ -x width ] [ -y height ] [image]\n", argv0);
+ sysfatal("Usage: %s [ -x width ] [ -y height ] [ file ]\n", argv0);
}
void
@@ -86,11 +101,14 @@ main(int argc, char **argv)
xsize = ysize = 0;
ARGBEGIN{
+ case 'a':
+ xsize = ysize = getsize(EARGF(usage()));
+ break;
case 'x':
- xsize = atoi(EARGF(usage()));
+ xsize = getsize(EARGF(usage()));
break;
case 'y':
- ysize = atoi(EARGF(usage()));
+ ysize = getsize(EARGF(usage()));
break;
default:
usage();
@@ -104,6 +122,10 @@ main(int argc, char **argv)
memimageinit();
if((im = readmemimage(fd)) == nil)
sysfatal("readmemimage: %r");
+ if(xsize & PERCENT)
+ xsize = ((xsize & ~PERCENT) * Dx(im->r)) / 100;
+ if(ysize & PERCENT)
+ ysize = ((ysize & ~PERCENT) * Dy(im->r)) / 100;
if(xsize || ysize){
if(ysize == 0)
ysize = (xsize * Dy(im->r)) / Dx(im->r);