将大图裁剪成瓦片

        if(argc < 2) {

             NSLog(@"TileCutter arguments: inputfile");

             return0;

        }

        //input file

       NSString *inputFile = [NSString stringWithCString:argv[1] encoding:NSUTF8StringEncoding];

       //tile size

       CGFloat tileSize = 256;//output path

       NSString *outputPath = [inputFile stringByDeletingPathExtension];

       //load image

       NSImage *image = [[NSImage alloc] initWithContentsOfFile:inputFile];

       NSSize size = [image size];

       NSArray *representations = [image representations];

       if([representations count]){

           NSBitmapImageRep *representation = representations[0];

           size.width = [representation pixelsWide];

           size.height = [representation pixelsHigh];

       }

       NSRect rect = NSMakeRect(0.0, 0.0, size.width, size.height);

       CGImageRef imageRef = [image CGImageForProposedRect:&rect context:NULL hints:nil];

       //calculate rows and columns

       NSInteger rows = ceil(size.height / tileSize);

       NSInteger cols = ceil(size.width / tileSize);

        //generate tiles

       for(int y = 0; y < rows; ++y) {

           for(int x = 0; x < cols; ++x) {

              //extract tile image

              CGRect tileRect = CGRectMake(x*tileSize, y*tileSize, tileSize, tileSize);

              CGImageRef tileImage = CGImageCreateWithImageInRect(imageRef, tileRect);

              //convert to jpeg data

              NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithCGImage:tileImage];

              NSData *data = [imageRep representationUsingType: NSJPEGFileType properties:nil];

              CGImageRelease(tileImage);

              //save file

              NSString *path = [outputPath stringByAppendingFormat: @"_i_i.jpg", x, y];

              [data writeToFile:path atomically:NO];

           }

       }

    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容