Revision: 31597
Updated Code
at September 9, 2010 07:52 by jimmcgowan
Updated Code
// MWWebSnapshot // // Created by Jim McGowan on 08/09/2010. // Copyright 2010 Jim McGowan. All rights reserved. // // This code is made available under the BSD license. // Please see the accompanying license.txt file // or view the license online at http://www.malkinware.com/developer/License.txt // #import <Cocoa/Cocoa.h> #import <WebKit/WebKit.h> @interface MWWebSnapshot : NSObject { void (^completionBlock)(NSImage *image); WebView *webView; } + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; @end @interface MWWebSnapshot() - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; - (void)_beginDownloadFromURL:(NSURL *)url; @end @implementation MWWebSnapshot + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; { MWWebSnapshot *instance = [[self alloc] _initWithCompletionBlock:block]; [instance _beginDownloadFromURL:url]; [instance autorelease]; } - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; { self = [super init]; if (self != nil) { completionBlock = [block copy]; webView = [[WebView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 1000.0, 1000.0) frameName:nil groupName:nil]; [webView setFrameLoadDelegate:self]; } return self; } - (void)_beginDownloadFromURL:(NSURL *)url; { [self retain]; [webView setMainFrameURL:[url absoluteString]]; } - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { if (frame != [webView mainFrame]) { return; } NSView *webFrameViewDocView = [[[webView mainFrame] frameView] documentView]; NSRect cacheRect = [webFrameViewDocView bounds]; NSBitmapImageRep *bitmapRep = [webFrameViewDocView bitmapImageRepForCachingDisplayInRect:cacheRect]; [webFrameViewDocView cacheDisplayInRect:cacheRect toBitmapImageRep:bitmapRep]; NSSize imgSize = cacheRect.size; if (imgSize.height > imgSize.width) { imgSize.height = imgSize.width; } NSRect srcRect = NSZeroRect; srcRect.size = imgSize; srcRect.origin.y = cacheRect.size.height - imgSize.height; NSRect destRect = NSZeroRect; destRect.size = imgSize; NSImage *webImage = [[[NSImage alloc] initWithSize:imgSize] autorelease]; [webImage lockFocus]; [bitmapRep drawInRect:destRect fromRect:srcRect operation:NSCompositeCopy fraction:1.0 respectFlipped:YES hints:nil]; [webImage unlockFocus]; NSSize defaultDisplaySize; defaultDisplaySize.height = 64.0 * (imgSize.height / imgSize.width); defaultDisplaySize.width = 64.0; [webImage setSize:defaultDisplaySize]; completionBlock(webImage); [self autorelease]; } - (void)dealloc { [completionBlock release]; [webView release]; [super dealloc]; } @end
Revision: 31596
Updated Code
at September 9, 2010 07:52 by jimmcgowan
Updated Code
// // MWWebSnapshot.h // // Created by Jim McGowan on 08/09/2010. // Copyright 2010 Jim McGowan. All rights reserved. // // This code is made available under the BSD license. // Please see the accompanying license.txt file // or view the license online at http://www.malkinware.com/developer/License.txt // #import <Cocoa/Cocoa.h> #import <WebKit/WebKit.h> @interface MWWebSnapshot : NSObject { void (^completionBlock)(NSImage *image); WebView *webView; } + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; @end @interface MWWebSnapshot() - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; - (void)_beginDownloadFromURL:(NSURL *)url; @end @implementation MWWebSnapshot + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; { MWWebSnapshot *instance = [[self alloc] _initWithCompletionBlock:block]; [instance _beginDownloadFromURL:url]; [instance autorelease]; } - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; { self = [super init]; if (self != nil) { completionBlock = [block copy]; webView = [[WebView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 1000.0, 1000.0) frameName:nil groupName:nil]; [webView setFrameLoadDelegate:self]; } return self; } - (void)_beginDownloadFromURL:(NSURL *)url; { [self retain]; [webView setMainFrameURL:[url absoluteString]]; } - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { if (frame != [webView mainFrame]) { return; } NSView *webFrameViewDocView = [[[webView mainFrame] frameView] documentView]; NSRect cacheRect = [webFrameViewDocView bounds]; NSBitmapImageRep *bitmapRep = [webFrameViewDocView bitmapImageRepForCachingDisplayInRect:cacheRect]; [webFrameViewDocView cacheDisplayInRect:cacheRect toBitmapImageRep:bitmapRep]; NSSize imgSize = cacheRect.size; if (imgSize.height > imgSize.width) { imgSize.height = imgSize.width; } NSRect srcRect = NSZeroRect; srcRect.size = imgSize; srcRect.origin.y = cacheRect.size.height - imgSize.height; NSRect destRect = NSZeroRect; destRect.size = imgSize; NSImage *webImage = [[[NSImage alloc] initWithSize:imgSize] autorelease]; [webImage lockFocus]; [bitmapRep drawInRect:destRect fromRect:srcRect operation:NSCompositeCopy fraction:1.0 respectFlipped:YES hints:nil]; [webImage unlockFocus]; NSSize defaultDisplaySize; defaultDisplaySize.height = 64.0 * (imgSize.height / imgSize.width); defaultDisplaySize.width = 64.0; [webImage setSize:defaultDisplaySize]; completionBlock(webImage); [self autorelease]; } - (void)dealloc { [completionBlock release]; [webView release]; [super dealloc]; } @end
Revision: 31595
Updated Code
at September 9, 2010 07:48 by jimmcgowan
Updated Code
// // MWWebSnapshot.h // // Created by Jim McGowan on 08/09/2010. // Copyright 2010 Jim McGowan. All rights reserved. // // This code is made available under the BSD license. // Please see the accompanying license.txt file // or view the license online at http://www.malkinware.com/developer/License.txt // #import <Cocoa/Cocoa.h> #import <WebKit/WebKit.h> @interface MWWebSnapshot : NSObject { void (^completionBlock)(NSImage *image); WebView *webView; } + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; @end @interface MWWebSnapshot() - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; - (void)_beginDownloadFromURL:(NSURL *)url; @end @implementation MWWebSnapshot + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; { MWWebSnapshot *instance = [[self alloc] _initWithCompletionBlock:block]; [instance _beginDownloadFromURL:url]; [instance autorelease]; } - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; { self = [super init]; if (self != nil) { completionBlock = [block copy]; webView = [[WebView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 1000.0, 1000.0) frameName:nil groupName:nil]; [webView setFrameLoadDelegate:self]; } return self; } - (void)_beginDownloadFromURL:(NSURL *)url; { [self retain]; [webView setMainFrameURL:[url absoluteString]]; } - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { if (frame != [webView mainFrame]) { return; } NSView *webFrameViewDocView = [[[webView mainFrame] frameView] documentView]; NSRect cacheRect = [webFrameViewDocView bounds]; NSBitmapImageRep *bitmapRep = [webFrameViewDocView bitmapImageRepForCachingDisplayInRect:cacheRect]; [webFrameViewDocView cacheDisplayInRect:cacheRect toBitmapImageRep:bitmapRep]; NSSize imgSize = cacheRect.size; if (imgSize.height > imgSize.width) { imgSize.height = imgSize.width; } NSRect srcRect = NSZeroRect; srcRect.size = imgSize; srcRect.origin.y = cacheRect.size.height - imgSize.height; NSRect destRect = NSZeroRect; destRect.size = imgSize; NSImage *webImage = [[[NSImage alloc] initWithSize:imgSize] autorelease]; [webImage lockFocus]; [bitmapRep drawInRect:destRect fromRect:srcRect operation:NSCompositeCopy fraction:1.0 respectFlipped:YES hints:nil]; [webImage unlockFocus]; NSSize defaultDisplaySize; defaultDisplaySize.height = 64.0 * (imgSize.height / imgSize.width); defaultDisplaySize.width = 64.0; [webImage setSize:defaultDisplaySize]; completionBlock(webImage); [self autorelease]; } - (void)dealloc { [completionBlock release]; [webView release]; [super dealloc]; } @end
Revision: 31594
Updated Code
at September 9, 2010 07:41 by jimmcgowan
Updated Code
// // MWWebSnapshot.h // // Created by Jim McGowan on 08/09/2010. // Copyright 2010 Jim McGowan. All rights reserved. // // This code is made available under the BSD license. Please see the accompanying license.txt file // or view the license online at http://www.malkinware.com/developer/License.txt // #import <Cocoa/Cocoa.h> #import <WebKit/WebKit.h> @interface MWWebSnapshot : NSObject { void (^completionBlock)(NSImage *image); WebView *webView; } + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; @end @interface MWWebSnapshot() - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; - (void)_beginDownloadFromURL:(NSURL *)url; @end @implementation MWWebSnapshot + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; { MWWebSnapshot *instance = [[self alloc] _initWithCompletionBlock:block]; [instance _beginDownloadFromURL:url]; [instance autorelease]; } - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; { self = [super init]; if (self != nil) { completionBlock = [block copy]; webView = [[WebView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 1000.0, 1000.0) frameName:nil groupName:nil]; [webView setFrameLoadDelegate:self]; } return self; } - (void)_beginDownloadFromURL:(NSURL *)url; { [self retain]; [webView setMainFrameURL:[url absoluteString]]; } - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { if (frame != [webView mainFrame]) { return; } NSView *webFrameViewDocView = [[[webView mainFrame] frameView] documentView]; NSRect cacheRect = [webFrameViewDocView bounds]; NSBitmapImageRep *bitmapRep = [webFrameViewDocView bitmapImageRepForCachingDisplayInRect:cacheRect]; [webFrameViewDocView cacheDisplayInRect:cacheRect toBitmapImageRep:bitmapRep]; NSSize imgSize = cacheRect.size; if (imgSize.height > imgSize.width) { imgSize.height = imgSize.width; } NSRect srcRect = NSZeroRect; srcRect.size = imgSize; srcRect.origin.y = cacheRect.size.height - imgSize.height; NSRect destRect = NSZeroRect; destRect.size = imgSize; NSImage *webImage = [[[NSImage alloc] initWithSize:imgSize] autorelease]; [webImage lockFocus]; [bitmapRep drawInRect:destRect fromRect:srcRect operation:NSCompositeCopy fraction:1.0 respectFlipped:YES hints:nil]; [webImage unlockFocus]; NSSize defaultDisplaySize; defaultDisplaySize.height = 64.0 * (imgSize.height / imgSize.width); defaultDisplaySize.width = 64.0; [webImage setSize:defaultDisplaySize]; completionBlock(webImage); [self autorelease]; } - (void)dealloc { [completionBlock release]; [webView release]; [super dealloc]; } @end
Revision: 31593
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at September 9, 2010 07:40 by jimmcgowan
Initial Code
// // MWWebSnapshot.h // // Created by Jim McGowan on 08/09/2010. // Copyright 2010 Jim McGowan. All rights reserved. // // This code is made available under the BSD license. Please see the accompanying license.txt file // or view the license online at http://www.malkinware.com/developer/License.txt // #import <Cocoa/Cocoa.h> #import <WebKit/WebKit.h> @interface MWWebSnapshot : NSObject { void (^completionBlock)(NSImage *image); WebView *webView; } + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; @end @interface MWWebSnapshot() - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; - (void)_beginDownloadFromURL:(NSURL *)url; @end @implementation MWWebSnapshot + (void)takeSnapshotOfWebPageAtURL:(NSURL *)url completionBlock:(void (^)(NSImage *))block; { MWWebSnapshot *instance = [[self alloc] _initWithCompletionBlock:block]; [instance _beginDownloadFromURL:url]; [instance autorelease]; } - (id)_initWithCompletionBlock:(void (^)(NSImage *))block; { self = [super init]; if (self != nil) { completionBlock = [block copy]; webView = [[WebView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 1000.0, 1000.0) frameName:nil groupName:nil]; [webView setFrameLoadDelegate:self]; } return self; } - (void)_beginDownloadFromURL:(NSURL *)url; { [self retain]; [webView setMainFrameURL:[url absoluteString]]; } - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame { if (frame != [webView mainFrame]) { return; } NSView *webFrameViewDocView = [[[webView mainFrame] frameView] documentView]; NSRect cacheRect = [webFrameViewDocView bounds]; NSBitmapImageRep *bitmapRep = [webFrameViewDocView bitmapImageRepForCachingDisplayInRect:cacheRect]; [webFrameViewDocView cacheDisplayInRect:cacheRect toBitmapImageRep:bitmapRep]; NSSize imgSize = cacheRect.size; if (imgSize.height > imgSize.width) { imgSize.height = imgSize.width; } NSRect srcRect = NSZeroRect; srcRect.size = imgSize; srcRect.origin.y = cacheRect.size.height - imgSize.height; NSRect destRect = NSZeroRect; destRect.size = imgSize; NSImage *webImage = [[[NSImage alloc] initWithSize:imgSize] autorelease]; [webImage lockFocus]; [bitmapRep drawInRect:destRect fromRect:srcRect operation:NSCompositeCopy fraction:1.0 respectFlipped:YES hints:nil]; [webImage unlockFocus]; NSSize defaultDisplaySize; defaultDisplaySize.height = 64.0 * (imgSize.height / imgSize.width); defaultDisplaySize.width = 64.0; [webImage setSize:defaultDisplaySize]; completionBlock(webImage); [self autorelease]; } - (void)dealloc { [completionBlock release]; [webView release]; [super dealloc]; } @end
Initial URL
http://www.malkinware.com/developer/
Initial Description
Initial Title
Create Snapshot Images from Webpages in Cocoa
Initial Tags
Initial Language
Objective C