git: 9front

Download patch

ref: c55129ee55bad85c1748108ebef39d49e0c253cd
parent: 00ff678d914be8dfb8e426217e6565159d20dce9
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Thu Oct 6 16:54:56 EDT 2011

manpages for resize and rotate

--- 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 @@
 ] [
 .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 @@
 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 @@
 .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.
--- /dev/null
+++ b/sys/man/1/rotate
@@ -1,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)
--- a/sys/src/cmd/resize.c
+++ b/sys/src/cmd/resize.c
@@ -70,10 +70,25 @@
 	}
 }
 
+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 @@
 
 	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 @@
 	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);
--