Git Product home page Git Product logo

climageeditor's Introduction

CLImageEditor

CLImageEditor provides basic image editing features to iPhone apps. This ViewController is simple to use, and is also possible to incorporate as part of the UIImagePickerController easily.

sample

Installing

The easiest way to use CLImageEditor is to copy all the files in the CLImageEditor group (or directory) into your app. Add the following frameworks to your project (Build Phases > Link Binary With Libraries): Accelerate, CoreGraphics, CoreImage.

And optional tools are in OptionalImageTools. You might want to add as needed.

Or git submodule

Alternatively, you should be able to setup a git submodule and reference the files in your Xcode project.

git submodule add https://github.com/yackle/CLImageEditor.git

Or CocoaPods

CocoaPods is a dependency manager for Objective-C projects.

pod 'CLImageEditor'

or

pod 'CLImageEditor/AllTools'

By specifying AllTools subspec, all image tools including optional tools are installed.

Optional Image Tools

There are the following optional tools.

pod 'CLImageEditor/ResizeTool'

pod 'CLImageEditor/StickerTool'

pod 'CLImageEditor/TextTool'

pod 'CLImageEditor/SplashTool'

Usage

Getting started with CLImageEditor is dead simple. Just initialize it with an UIimage and set a delegate. Then you can use it as a usual ViewController.

#import "CLImageEditor.h"

@interface ViewController()
<CLImageEditorDelegate>
@end

- (void)presentImageEditorWithImage:(UIImage*)image
{
    CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:image];
    editor.delegate = self;
	
    [self presentViewController:editor animated:YES completion:nil];
}

When used with UIImagePickerController, CLImageEditor can be made to function as a part of the picker by to call the picker's pushViewController:animated:.

#pragma mark- UIImageController delegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    
    CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:image];
    editor.delegate = self;
    
    [picker pushViewController:editor animated:YES];
}

After a image has been edited, the editor will call delegate's imageEditor:didFinishEdittingWithImage: method. The delegate's method is required to receive edited image.

#pragma mark- CLImageEditor delegate

- (void)imageEditor:(CLImageEditor *)editor didFinishEdittingWithImage:(UIImage *)image
{
    _imageView.image = image;
    [editor dismissViewControllerAnimated:YES completion:nil];
}

Additionally, the optional delegate's imageEditorDidCancel: method is provided for when you want to catch the cancel callback.

For more detail, please see CLImageEditorDemo.

Customizing

Icon images are included in CLImageEditor.bundle. You can change the appearance by rewriting the icon images.

Other features for theme settings not yet implemented.

Menu customization

Image tools can customize using CLImageToolInfo. CLImageEditor's toolInfo property has functions to access each tool's info. For example, subToolInfoWithToolName:recursive: method is used to get the tool info of a particular name.

CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:_imageView.image];
editor.delegate = self;

CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLToneCurveTool" recursive:NO];

After getting a tool info, by changing its properties, you can customize the image tool on menu view.

CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLToneCurveTool" recursive:NO];
tool.title = @"TestTitle";
tool.available = NO;     // if available is set to NO, it is removed from the menu view.
tool.dockedNumber = -1;  // Bring to top
//tool.iconImagePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];
  • dockedNumber determines the menu item order. Note that it is simply used as a key for sorting.

The list of tool names can be confirmed with the following code.

NSLog(@"%@", editor.toolInfo);
NSLog(@"%@", editor.toolInfo.toolTreeDescription);

Currently, here are the tools for iOS 7:

CLFilterTool
	CLDefaultEmptyFilter
	CLDefaultLinearFilter
	CLDefaultVignetteFilter
	CLDefaultInstantFilter
	CLDefaultProcessFilter
	CLDefaultTransferFilter
	CLDefaultSepiaFilter
	CLDefaultChromeFilter
	CLDefaultFadeFilter
	CLDefaultCurveFilter
	CLDefaultTonalFilter
	CLDefaultNoirFilter
	CLDefaultMonoFilter
	CLDefaultInvertFilter    
CLAdjustmentTool
CLEffectTool
	CLEffectBase
	CLSpotEffect
	CLHueEffect
	CLHighlightShadowEffect
	CLBloomEffect
	CLGloomEffect
	CLPosterizeEffect
	CLPixellateEffect
CLBlurTool
CLRotateTool
CLClippingTool
CLResizeTool
CLToneCurveTool
CLStickerTool
CLTextTool

Some tools have optionalInfo property and it makes it possible to customize more detail.

Clipping tool

Clipping tool allows you to set preset ratios and portrait/landscape button visibility.

NSArray *ratios = @[
                    @{@"value1":@0, @"value2":@0,       @"titleFormat":@"Custom"}, // if either value is zero, free form is set.
                    @{@"value1":@1, @"value2":@1,       @"titleFormat":@"%.1f : %.1f"},
                    @{@"value1":@1, @"value2":@1.618,   @"titleFormat":@"%g : %g"},
                    @{@"value1":@2, @"value2":@3},
                    @{@"value1":@3, @"value2":@2},
                    ];

CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLClippingTool" recursive:NO];
tool.optionalInfo[@"ratios"] = ratios;
tool.optionalInfo[@"swapButtonHidden"] = @YES;
Resize tool

You can set preset sizes and maximum size.

CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLResizeTool" recursive:NO];
tool.optionalInfo[@"presetSizes"] = @[@240, @320, @480, @640, @800, @960, @1024, @2048];
tool.optionalInfo[@"limitSize"] = @3200;
Sticker tool

You can set a path to a directory of another bundle where there are sticker images.

CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLStickerTool" recursive:NO];
tool.optionalInfo[@"stickerPath"] = @"yourStickerPath";

License

CLImageEditor is released under the MIT License, see LICENSE.

Acknowledgments

Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY

climageeditor's People

Contributors

albertbori avatar bigship avatar colincameron avatar cshcshan avatar dabing1022 avatar dkhamsing avatar hollowaykeanho avatar imokhles avatar jinjorge avatar jtmilne avatar krzd avatar markchous avatar mkernahan avatar patrickjmcgoldrick avatar peiweichen avatar rgallagher27 avatar ryohey avatar stremsdoerfer avatar tbogosia avatar tipycalflow avatar vvit avatar yackle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

climageeditor's Issues

Without xib

i'm looking for if you would like to release version without xib file ;)

Suggestions

This is excellent. Thank you for making this.
I was looking for something just like Aviary but open source and finally you have started it.

I'm sure you have a roadmap/todo list but just wanted to suggest that adding of text and stickers to images would put this on par with Aviary.

Thanks again

Back and OK Button

The back and ok button is not showing up in the demo app, when i use the the camera to edit a photo.

Sticker minimum size

Hi, This isn't actually an issue, but i'm struggling to find what sets the minimum size of the stickers?
When you use the circle to shrink them, they stop when they get to a certain size. Can they go smaller?

Thanks

Draw function

Touch and draw on the screen. Choose pencil of different color and thickness.

iPad and Landscape Orientation Support Merge

If I make this Library work with iPad and Landscape Orientation, will you accept a merge request? I already have it part way there.. Image Editing, in general, is popular on the iPad.. It would be a shame to keep this Library limited to iPhone only.

Questions about optionalImageTools

For now, we can add a menu btn by creating child class of CLImageToolBase.
Is there any way to add a menu btn for example another sticker button with different name, icon and resources path?

Crop to square before editing

Hi there, first of all love your work!! :) Is it possible to crop the image to a square image before editing?

Thank you for your answer.

Image rotation issue

Using CLRotateTool to rotate an upsidedown image works well when looking at the image in xcode, but after saving to iphone image library the image is still upsidedown. Is there a metadata change in CLRotateTool that should be included when saving the image?

CLTextTool

how to include CLTextTool alone to my project....?
help me..

Help Application crash

CLImageEditorDemo crash under iOS 8 on iPad when save btn pressed, i know it's UIActivityViewController causing the crash but i don't know how i can fixe it

How can I add Core Image blendmode mulitiply to the sticker tool layer.

I am trying to achieve in having the sticker tool to composite my custom images to the edited image so that the sticker image merges with the multiply blend effect for the final result having more transparency to the sticker image thus a merged look, much like a tattoo or watermark.
I need to have the sticker image to contain some of the image below it show through in which the core image framework's blend filter multiply achieves, however I have no idea where to attach the code to or what code will best achieve this. Could you or some one point me to what and where I can call up the blend multiply filter for the stickers?
Thanks

Image Resizing

First of all, thank you for the fantastic library! It is exactly what I need for my Photo Manipulation and sharing application, and it sounds like their is a lot of great features that are being worked on.

I have fully implemented CLImageEditor into my target, and all of the tools and features work really well for me. However, when I select my edited image to return back to my storyboard, the new edited image takes up a very small portion of the screen, and is positioned to the left hand corner. I have compared my storyboard to the Demo app's, they both look very similar and I have not modified the image editor in any major way yet. I was simply inquiring if this is a possible and likely problem on my part on the storyboard implementation, or if the only way to resize the edited image is to use the scroll view.

Thanks again for the amazing library,
Christopher.

How to customize the tools view?

Great class, thanks for sharing it :-)
Is there a way to hide some of the features in the bottom tool view without hacking the code? I use cocoapods and I would like to leave your code untouched

thanks
Paolo

Splash effect

Turn the photo to black and white. And then user can choose the area to restore the original color.

Text, sticker smily added blur after click on Done button.

Its very nice library you create but i having one issue with this when i add text smily sticker and setting in image then when i tap on Done button that main image still look same but i added sticker text getting Blur on image can you please help me on this.

Here I attach screenshot befor done click:

screen shot 2014-07-25 at 11 44 09 pm

After done click

screen shot 2014-07-25 at 11 47 50 pm

Cocoapods Integration

Hi,

I tried to integrate this library with cocoapods by adding :

pod 'CLImageEditor'

or

pod 'CLImageEditor/AllTools'

in my Podfile but i always get the following error :
[!] Invalid Podfile file: /Users/florianbasso/Documents/Developpement/iOS/crossroad_ios/Podfile:4: syntax error, unexpected '', expecting end-of-input
pod 'CLImageEditor/AllTools’, '
> 0.0'
^. Updating CocoaPods might fix the issue.

However when i paste in my Podfile : pod 'CLImageEditor', '~> 0.0'
It works the pod is installed but I have a lot of problem with methods undefined, etc...

Do you have any idea how to fix this please ?
Thanks and have a nice day :)

I have a bug when edit image.

If device in landscape mode and i press edit button window becomes white and image not showing
ios simulator screen shot jun 21 2014 5 45 36 pm

But in portrait mode everything is fine.
ios simulator screen shot jun 21 2014 5 47 13 pm

How fix this bug?
Thanks you.

iOS 6 shows only 3 filters

If I run the app on iOS 6, it shows only 3 filters whereas it shows 14 filters on iOS 7. Can you please test and fix this?

iPad version

Hi

Does someone can help to find the better way to add iPad compatibility?

Border Frames.

I think the way the code is written is absolutely brilliant . Only thing i see missing now is frames around the picture to complete it. I will try doing it too.

iOS 7 issue

Hi! I tried to use this editor in iOS 7 with only status bar hidden mode. And it looks like something is wrong in layout. So when main toolbar hides and effect's toolbar appears it appears a bit upper (64px) than in your demo app. Could you help me to fix this issue?

image 2
image

Error or Bug? Continue with errors.......

Hello again.......
For helping you to understand and give me a solution.
The errors are the following....

Apple Mach-O Linker Error..

"OBJC_CLASS$_CIContext", referenced from:

"OBJC_CLASS$_CIFilter", referenced from:

"OBJC_CLASS$_CIImage", referenced from:

"OBJC_CLASS$_CIVector", referenced from:

"_kCIInputImageKey", referenced from:

"_vImageConvolve_ARGB8888", referenced from:

ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Space between toolBar item

hi, i'm french so sorry for my bad english,

Your imageEditor is amazing, but i want to know how i can put a space between every item toolbar because for an application for my final school test i would like to use juste 3 item and that 3 item take all toolBar, so i need some space,

thank you very much,
merci beaucoup ciao

Keep a reference to the original image to rollback modifications

First, thx for the great work!
Was just wondering which approach would you suggest in order to keep a reference to the original image once filters are applied (and other effects), in order to rollback.

For instance, when a filter is applied and confirmed the original image is modified and if I m not wrong, the original image cannot be displayed again. Same for the other effects.

Thx for your help.

iPhone 4 - iOS7 - Back Camera: When using filter the app rise in memory and then crash.

I notice that when i use a photo piked with camera in iPhone 4 and trying to apply filter the memory start rising and, at the end, crash the app. The filter never appear in preview images. I suppose that this happen in this (slow) device because is too slow to apply filters to big images and, at the end, the app crash.

On iPhone 5s everything is ok, obviously.

PS: sorry for my english :)

CLSplashTool does't load gray image with correct aspect ratio

The following 2 lines of code fixed the issue for me in CLSplashTool.m:

_drawingView.contentMode = UIViewContentModeScaleAspectFit; // new line of code; below [[UIImageView alloc] initWithFrame...

_grayImage = [[self.editor.imageView.image aspectFit:CGSizeMake(_drawingView.width_2, _drawingView.height_2)] grayScaleImage]; // modified existing line of code; by changing resize to aspectFit

Disable some options and multiple images ?

  1. Is it possible to disable some image editing options I dont want to use or rather load the options I want to use ? Lets say I don't want advanced options like curves etc. is it done by tool.available = NO; example in readme ?
  2. Any possibility to load and edit multiple images at once ? Something like a collage or such, like add 2 images and edit them together, there should be some possibility since you can add multiple emoticons or frames/stickers. I had a workaround idea of possibily adding a duplicate tool option based on stickers and load images from album to it to add additional images like stickers, but that won't be a clean thing over main image

Multiple resolution @2x images

In bundle , we dont have way to include normal and @2x.png . If we want @2x its included too with normal. So both appears on the bottom bar.

Error in Text Tool

ios simulator screen shot mar 30 2014 2 40 06 pm

When set color for Text. If you scroll down alpha column, all control for set color not response. I attach image for this issue. :)

Error or Bug?

Hello,
Many thanks for your excellent tool.
I have a small problem.
I try to attach your tool in an app I am implementing and I get an error.
Is something missing that I can not find?
Can you help please?

George N. Gerardis

Fix for the whitespace after applying the pixellate effect.

The code below will crop the transparent space around the image after the pixellate effect is applied to it. Without this code the user sees a white border around the image when they close the editor. I hope this helps someone out. It could probably be cleaned up a bit, but it's working just fine for me.

This change needs to be applied to the file CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.m
Find -(UIImage_)applyEffect:(UIImage_)image { ..... } and replace it with..

- (UIImage*)applyEffect:(UIImage*)image
{
    CIImage *ciImage = [[CIImage alloc] initWithImage:image];
    CIFilter *filter = [CIFilter filterWithName:@"CIPixellate" keysAndValues:kCIInputImageKey, ciImage, nil];

    //NSLog(@"%@", [filter attributes]);

    [filter setDefaults];

    CGFloat R = (0.1 * _radiusSlider.value) * MIN(image.size.width, image.size.height);
    CIVector *vct = [[CIVector alloc] initWithX:image.size.width/2 Y:image.size.height/2];
    [filter setValue:vct forKey:@"inputCenter"];
    [filter setValue:[NSNumber numberWithFloat:R] forKey:@"inputScale"];

    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *outputImage = [filter outputImage];

    CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]];

    UIImage *result = [UIImage imageWithCGImage:cgImage];

    CGImageRelease(cgImage);

    CGImageRef inImage = result.CGImage;
    CFDataRef m_DataRef;
    m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage));
    UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef);

    int width = result.size.width;
    int height = result.size.height;

    CGPoint top,left,right,bottom;

    BOOL breakOut = NO;
    for (int x = 0;breakOut==NO && x < width; x++) {
        for (int y = 0; y < height; y++) {
            int loc = x + (y * width);
            loc *= 4;
            if (m_PixelBuf[loc + 3] != 0) {
                left = CGPointMake(x, y);
                breakOut = YES;
                break;
            }
        }
    }

    breakOut = NO;
    for (int y = 0;breakOut==NO && y < height; y++) {

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

            int loc = x + (y * width);
            loc *= 4;
            if (m_PixelBuf[loc + 3] != 0) {
                top = CGPointMake(x, y);
                breakOut = YES;
                break;
            }

        }
    }

    breakOut = NO;
    for (int y = height-1;breakOut==NO && y >= 0; y--) {

        for (int x = width-1; x >= 0; x--) {

            int loc = x + (y * width);
            loc *= 4;
            if (m_PixelBuf[loc + 3] != 0) {
                bottom = CGPointMake(x, y);
                breakOut = YES;
                break;
            }

        }
    }

    breakOut = NO;
    for (int x = width-1;breakOut==NO && x >= 0; x--) {

        for (int y = height-1; y >= 0; y--) {

            int loc = x + (y * width);
            loc *= 4;
            if (m_PixelBuf[loc + 3] != 0) {
                right = CGPointMake(x, y);
                breakOut = YES;
                break;
            }

        }
    }


    CGRect cropRect = CGRectMake(left.x, top.y, right.x - left.x, bottom.y - top.y);

    UIGraphicsBeginImageContextWithOptions( cropRect.size,
                                           NO,
                                           0.);
    [result drawAtPoint:CGPointMake(-cropRect.origin.x, -cropRect.origin.y)
           blendMode:kCGBlendModeCopy
               alpha:1.];
    UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    CFRelease(m_DataRef);
    return croppedImage;
}

Duplicate CLStickerTool to load diff images

Is it possible to create another (3rd tool) based on stickers or emoticons which loads a diff set of images ?
I want this 3rd tool to load images from user's album, as part of my attempt to do multi image editing while using main image as a white canvas

GPUImage Support?

Hello,

Has anyone got any idea how to implement GPUImage [https://github.com/BradLarson/GPUImage] as an Optional ImageTool for more advanced image filters and manipulations. I've been trying for the last week to implement this feature, to little success.

Any response is greatly appreciated.

Christopher

Landscape mode

Hi!

Is it possible to enable rotation for landscape mode, and how can i create custom filters?

Do high resolution stickers/emoticons slow the app ?

I have 15-20 large resolution stickers (which I am using as frame images, not actual stickers) of resolution 1024px~ and 300-900kb each
In simulator clicking the sticker button had a delay of 2 secs before the sticker tool opened, but in a actual ipad air there was a 6-7 secs delay

So, what slows down the stickers tool load time ? Size of images, resolution or number of images ?
Is there any way to improve it like pre-loading them, async load or perhaps showing a activity indicator that the app is busy loading them ?

Batch Conversion

an nice idea is to do implement a batch Conversion. On button press all the effects will be save in a batch. And this batch you can do on any image you want. Is this possible.

Kevin

Image size

What is the way to get same image size main screen and edit screen?
resetImageViewFrame in _CLImageEditorViewController is different than resetImageViewFrame in ViewController demo, so i would like same size for both views

Image in main screen don't look same in main screen under iOS7 and iOS8, need some help please
(in CLImageEditorDemo)

Bug Gloom and Bloom Effects

After modifications apply in Bloom or Gloom effects the save image is resize? Is it normal, seems the same filters use in another app done the same bug!

Spot effect don't apply modifications after changes!

I found that last modifications in CLImageEditor/Utils/UIImage+Utility.m made the bugs! Any comment?

  • UIGraphicsBeginImageContext(image.size);
  • UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
  • UIGraphicsBeginImageContext(CGSizeMake(rect.size.width, rect.size.height));
  • UIGraphicsBeginImageContextWithOptions(CGSizeMake(rect.size.width, rect.size.height), NO, 0.0);

Custom Filters

Hi,

I want to add customs filters (ex: add Image with transparency to create more effects) does CLFilterTool a good starting point? ( I'm newbie :) )

Logo for branding

Firstly thanks for your efforts.

I want to add my logo for branding my application like Retrica.

is it possible?

iPad version

hi!

I'm trying to make an iPad version for my app, i don't find where i could make modification for slider in effects tools

Someone can help?

Required photo ratio after editing

I would like to force my users to crop their photo to one of the specified sizes defined in the ratios key of CLClippingTool's optionalInfo dictionary.

What the best way of going around this? Should I make a custom subtool that based off of CLClippingTool?

Is there any way to prevent the user from selecting done from a subtool?

Somethings wrong with CLTextTool

when it has been alloc CLTextTool, the memory become 19.3MB.It is a little big, but i can be tolerant of this.
when I type a lot of words , the memory become 200+MB, oh,that's terrible,my iphone6 become so slow and i can't type more words immediately.

here is the screenshots
error1
error2
error3

somethings I missed? Or,some ways for solving this problem.
hope your feed back. thank you...

issue from an chinese IOSDev whose English is a little weak.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.