Permalink
Browse files

quick little project to convert images in RTFD on the clipboard from …

…tiff or png, into jpeg.
  • Loading branch information...
1 parent ed4e92a commit df7782264ee41515925e71740738d7410ee96aed @ccgus committed Sep 5, 2010
@@ -0,0 +1,79 @@
+.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples.
+.\"See Also:
+.\"man mdoc.samples for a complete listing of options
+.\"man mdoc for the short list of editing options
+.\"/usr/share/misc/mdoc.template
+.Dd 9/4/10 \" DATE
+.Dt ConvertImagesToJPEG 1 \" Program name and manual section number
+.Os Darwin
+.Sh NAME \" Section Header - required - don't modify
+.Nm ConvertImagesToJPEG,
+.\" The following lines are read in generating the apropos(man -k) database. Use only key
+.\" words here as the database is built based on the words here and in the .ND line.
+.Nm Other_name_for_same_program(),
+.Nm Yet another name for the same program.
+.\" Use .Nm macro to designate other names for the documented program.
+.Nd This line parsed for whatis database.
+.Sh SYNOPSIS \" Section Header - required - don't modify
+.Nm
+.Op Fl abcd \" [-abcd]
+.Op Fl a Ar path \" [-a path]
+.Op Ar file \" [file]
+.Op Ar \" [file ...]
+.Ar arg0 \" Underlined argument - use .Ar anywhere to underline
+arg2 ... \" Arguments
+.Sh DESCRIPTION \" Section Header - required - don't modify
+Use the .Nm macro to refer to your program throughout the man page like such:
+.Nm
+Underlining is accomplished with the .Ar macro like this:
+.Ar underlined text .
+.Pp \" Inserts a space
+A list of items with descriptions:
+.Bl -tag -width -indent \" Begins a tagged list
+.It item a \" Each item preceded by .It macro
+Description of item a
+.It item b
+Description of item b
+.El \" Ends the list
+.Pp
+A list of flags and their descriptions:
+.Bl -tag -width -indent \" Differs from above in tag removed
+.It Fl a \"-a flag as a list item
+Description of -a flag
+.It Fl b
+Description of -b flag
+.El \" Ends the list
+.Pp
+.\" .Sh ENVIRONMENT \" May not be needed
+.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1
+.\" .It Ev ENV_VAR_1
+.\" Description of ENV_VAR_1
+.\" .It Ev ENV_VAR_2
+.\" Description of ENV_VAR_2
+.\" .El
+.Sh FILES \" File used or created by the topic of the man page
+.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact
+.It Pa /usr/share/file_name
+FILE_1 description
+.It Pa /Users/joeuser/Library/really_long_file_name
+FILE_2 description
+.El \" Ends the list
+.\" .Sh DIAGNOSTICS \" May not be needed
+.\" .Bl -diag
+.\" .It Diagnostic Tag
+.\" Diagnostic informtion here.
+.\" .It Diagnostic Tag
+.\" Diagnostic informtion here.
+.\" .El
+.Sh SEE ALSO
+.\" List links in ascending order by section, alphabetically within a section.
+.\" Please do not reference files that do not exist without filing a bug report
+.Xr a 1 ,
+.Xr b 1 ,
+.Xr c 1 ,
+.Xr a 2 ,
+.Xr b 2 ,
+.Xr a 3 ,
+.Xr b 3
+.\" .Sh BUGS \" Document known, unremedied bugs
+.\" .Sh HISTORY \" Document history if command behaves in a unique manner
@@ -0,0 +1,70 @@
+#import <Cocoa/Cocoa.h>
+
+#define debug NSLog
+
+int main (int argc, const char * argv[]) {
+ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+
+ NSPasteboard *pboard = [NSPasteboard generalPasteboard];
+
+ NSData *rtfdData = [pboard dataForType:NSRTFDPboardType];
+ if (!rtfdData) {
+ NSLog(@"No rtfd data on the clipboard");
+ return 1;
+ }
+
+ NSAttributedString *contents = [[[NSAttributedString alloc] initWithRTFD:rtfdData documentAttributes:nil] autorelease];
+
+ if (!contents) {
+ NSLog(@"Could not make rtfd");
+ return 2;
+ }
+
+ NSInteger length = [contents length];
+ NSRange r;
+ NSDictionary *attributes = [contents attributesAtIndex:0 effectiveRange:&r];
+
+ while (r.location + r.length <= length) {
+
+ NSTextAttachment *att = [attributes objectForKey:NSAttachmentAttributeName];
+
+ if (att) {
+
+ NSFileWrapper *wrap = [att fileWrapper];
+
+ if ([wrap isRegularFile] && ([[wrap preferredFilename] hasSuffix:@".png"] || [[wrap preferredFilename] hasSuffix:@".tiff"])) {
+
+ NSImage *img = [[[NSImage alloc] initWithData:[wrap regularFileContents]] autorelease];
+
+ NSData *data = [[[img representations] objectAtIndex:0] representationUsingType:NSJPEGFileType
+ properties:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:.7f], NSImageCompressionFactor, nil]];
+
+
+ NSFileWrapper *newfw = [[[NSFileWrapper alloc] initRegularFileWithContents:data] autorelease];
+
+ NSString *newName = [[wrap preferredFilename] stringByDeletingPathExtension];
+
+ newName = [NSString stringWithFormat:@"%@.jpg", newName];
+
+ [newfw setPreferredFilename:newName];
+
+ [att setFileWrapper:newfw];
+ }
+ }
+
+ if (r.location+r.length >= length) {
+ break;
+ }
+
+ attributes = [contents attributesAtIndex:r.location+r.length effectiveRange:&r];
+ }
+
+ NSData *d = [contents RTFDFromRange:NSMakeRange(0, [contents length]) documentAttributes:nil];
+
+ [pboard declareTypes:[NSArray arrayWithObjects:NSRTFDPboardType, nil] owner:nil];
+ [pboard setData:d forType:NSRTFDPboardType];
+
+ [pool drain];
+
+ return 0;
+}
Oops, something went wrong.

0 comments on commit df77822

Please sign in to comment.