Git Product home page Git Product logo

tedpicker's Introduction

Android Arsenal Release

What is TedPicker?

TedPicker is image selector library for android and allows you to easily take a picture from gallery or camera without using a lot of boilerplate code.
Do not waste your time for writing image select function code. You can take a picture or select image from gallery.

Also you can customize color, drawable, select count, etc for your application.

Demo

Watch video at youtube

Screenshot

Setup

Gradle

We will use cwac-camera for take a picture. And get library from jitpack.io

repositories {
    maven { url "https://repo.commonsware.com.s3.amazonaws.com" }
    maven { url "https://jitpack.io" }

}

dependencies {
      compile 'com.github.ParkSangGwon:TedPicker:v1.0.10'
}
Permission

Add permission for Camera, External Storage.

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Activity

Declare Activity in your AndroidManifest.xml

<activity android:name="com.gun0912.tedpicker.ImagePickerActivity" 
                      android:screenOrientation="portrait"
/>

you have to use AppCompat theme like this. ImagePickerActivity use toolbar without actionbar

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>


        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>

How to use

1. Start Activity

Add your request code for startActivityForResult() and start ImagePickerActivity

    private static final int INTENT_REQUEST_GET_IMAGES = 13;

    private void getImages() {

        Intent intent  = new Intent(this, ImagePickerActivity.class);
        startActivityForResult(intent,INTENT_REQUEST_GET_IMAGES);

    }
2. Receive Activity

If you finish image select, you will recieve image path array (Uri type)

    @Override
    protected void onActivityResult(int requestCode, int resuleCode, Intent intent) {
        super.onActivityResult(requestCode, resuleCode, intent);

            if (requestCode == INTENT_REQUEST_GET_IMAGES && resuleCode == Activity.RESULT_OK ) {

                ArrayList<Uri>  image_uris = intent.getParcelableArrayListExtra(ImagePickerActivity.EXTRA_IMAGE_URIS);

                //do something
            }
    }

Customize

You can change color, drawable, height ...
Before call startActivityForResult(), set your Config instance to ImagePickerActivity

Example
        Config config = new Config();
        config.setCameraHeight(R.dimen.app_camera_height);
        config.setToolbarTitleRes(R.string.custom_title);
        config.setSelectionMin(2);
        config.setSelectionLimit(4);
        config.setSelectedBottomHeight(R.dimen.bottom_height);

        ImagePickerActivity.setConfig(config);

        Intent intent = new Intent(this, ImagePickerActivity.class);
        startActivityForResult(intent, INTENT_REQUEST_GET_IMAGES);
Function
  • setCameraHeight(R.dimen.xxx) (default: 250dp)

  • setSelectedBottomHeight(R.dimen.xxx) (default: 90dp)

  • setSelectedBottomColor(R.color.xxx) (default: R.attr.colorAccent)

  • setToolbarTitleRes(R.string.xxx) (default: Choice Image / 사진선택)

  • setTabBackgroundColor(R.color.xxx) (default: #fff)

  • setTabSelectionIndicatorColor(R.color.xxx) (default: R.attr.colorPrimary)

  • setSelectionLimit(int)

  • setSelectionMin(int)

  • setCameraBtnImage(R.drawable.xxx)

  • setCameraBtnBackground(R.drawable.xxx)

  • setSelectedCloseImage(R.drawable.xxx)

  • setSavedDirectoryName(R.string.xxx) (default: Pictures)

  • setFlashOn(boolean) (default: false)

Thanks

License

Copyright 2016 Ted Park

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.```

tedpicker's People

Contributors

ggikko avatar gun0912 avatar parksanggwon avatar robertslando avatar vbauer 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

tedpicker's Issues

Assigning mime type

Hi,
I was impressed by your work, and I want to use this library for my project.
But there is a feature to be added to fit my requirements perfectly.

I want to assign mime type. (and Picker activity would show only images that are of the mime type)
I don't see how to do this with current version.

Am I missing something? or mime type feature is not supported?
Is there any chance you have plan to implement this?

Thanks.

Image Select Toolbar doesn't show up.

@ParkSangGwon , @gun0912
I did all according to the instructions provided for some reason the toolbar to select image isn't appearing in my application, kindly check the screenshot below

image

Another issue which i m facing is with the camera activity, whenever i click an image, it comes below in the selected images list perfectly but the camera is just still showing the same image, it doesn't refresh itself to click another one, or turns into a black screen and the capture button doesn't do anthing.

Front Camera 전면 카메라는 사용 불가한가요?

Poly Picker 를 사용하기위해 찾아보다가 넘어오게 되었는데요
블로그도 잘 보고 있는 1인입니다. ㅎ
Poly Picker보다 사용법이 쉽게 잘만들어주셨더군요. 감사합니다.

Picker 액티비티를 실행했을 때
카메라 탭에서 기본 카메라로 전면 카메라를 쓰고 싶은데
커스텀 세팅이 가능할까요?
혹은 추후 전면카메라 전환 버튼 같은 걸 추가하실 계획이 있으신지 궁금합니다.

on 'CAMERA' tab, I want change default camera to front one.
Can I customize?

How to take a selfie?

Its an awesome library and thanks for that. But how to take a selfie. It seems i can't reverse the camera?

Orrientation issue

I found an issue while taking picture in landscape mode . if i took one picture in landscape mode later the other pictures took using portrait mode give same orientation which i got in landscape .

See screen shot please

  1. First picture took in portrait mode
    screenshot_2016-02-04-11-01-48
  2. Second picture took in landscape mode
    screenshot_2016-02-04-11-02-16
  3. Third picture took in portrait mode but getting picture like in landscape mode (issue)
    screenshot_2016-02-04-11-02-54

Camera Capture not working for me

Exception in setPreviewDisplay()
java.io.FileNotFoundException: /storage/emulated/0/Pictures/Photo_20170609_124011.jpg (Permission denied)

but i added permission to manifest

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

also allow the permission in device.

but that camera loader loading without finishing . give that error

Library translation

have any way to implement translation of this library into other languages?

dependencies error

I got this error while import in android studio

Error:(6, 0) No service of type Factory available in ProjectScopeServices.
apply plugin: 'com.github.dcendents.android-maven' to use this plugins

setCameraHeight not working

In my tablet (Samsung Galaxy Tab 4) it's impossible to change the Camera Height.

I attach a screenshot of what appears with every dimension.
screenshot_2016-03-08-13-55-39

Enable translation for selected image section

The bottom section where the selected images are shown doesn't allow change the title. When no images are selected occurs the same situation, the text shown can't be changed.

Please, add two more methods to change those texts like setToolbarTitleRes(@StringRes int titleRes) method does.

Thanks.

Camera Flash Toggle not working in Samsung J7, Moto and similar SoC(System on Chip)

How to allow to select a single image

Hi, my app needs to allow users to select a single image.
Is there any way to make it?
I know that TedBottomPicker has single selection mode. Does this library provide the similar functionality?

Image Rotation

Sometime the image picked by the library is rotate on 270 but the device orientation is 0. Please help me to fix this issue.

app crash

when i am selecting images less than 4 at that time app is crashing ..??.i already set alert dialog but it doesn't work.
so please help
thanks in advance

Square image

Is it possible to ensure square images ?
As config.setCameraHeight(int h) receives an integer value that corresponds to a resource not to a real value, it does not accept the calculated screen width value.

Camera Capture not work

I try take a photo, but not work.

Exception in setPreviewDisplay()
java.io.FileNotFoundException: /storage/emulated/0/Mct/Photo_20200316_121521.jpg (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:308)
at java.io.FileOutputStream.(FileOutputStream.java:238)
at java.io.FileOutputStream.(FileOutputStream.java:180)
at com.gun0912.tedpicker.CwacCameraFragment$MyCameraHost.saveImage(CwacCameraFragment.java:590)
at com.commonsware.cwac.camera.ImageCleanupTask.run(ImageCleanupTask.java:166)

Only use camera and not gallery

Is there way where I can force TEDPicker to use images only from Camera and restrict for Gallery? If yes, please let me know.

Having this feature would be great where we can restrict to use Camera or Gallery ONLY option.

Option 1 : Camera Only
Option 2 : Gallery Only
Option 3 : Camera & Gallery Both

Crash due to version of Glide

I am using the Glide version 4.9.0 and library uses 3.6.1, due to which app crashes.
Can please the version be upgraded?

Thanks in advance.

Error inflating ImageButton cwac camera

I have this issue when use your library, i have test this on android JB 4.1.2 .

E/AndroidRuntime: FATAL EXCEPTION: main android.view.InflateException: Binary XML file line #50: Error inflating class ImageButton at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at com.gun0912.tedpicker.CwacCameraFragment.onCreateView(CwacCameraFragment.java:104) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613) at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) at android.support.v4.view.ViewPager.populate(ViewPager.java:1106) at android.support.v4.view.ViewPager.populate(ViewPager.java:952) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474) at android.view.View.measure(View.java:15193) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) at android.view.View.measure(View.java:15193) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) at android.view.View.measure(View.java:15193) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:15193) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) at android.view.View.measure(View.java:15193) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:15193) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) at android.view.View.measure(View.java:15193) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2152) at android.view.View.measure(View.java:15193) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4216) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:525) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4794) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect

Can not set color for tab and tab indicator

I'm trying to change tab and tabindicator color as mentioned by two functions below:

setTabBackgroundColor(R.color.xxx) (default: #fff)
setTabSelectionIndicatorColor(R.color.xxx) (default: R.attr.colorPrimary)

But it doesn't work. It show a wrong color that not the color given. How to solve?

RunTimeException: Unknown Camera ID

During development of an app of mine I encounter the following error from time to time on my Nexus 6P.

Fatal Exception: java.lang.RuntimeException: Unknown camera ID at android.hardware.Camera._getCameraInfo(Camera.java) at android.hardware.Camera.getCameraInfo(Camera.java:236) at com.commonsware.cwac.camera.CameraView.getCameraPictureRotation(CameraView.java:625) at com.commonsware.cwac.camera.CameraView.access$100(CameraView.java:38) at com.commonsware.cwac.camera.CameraView$OnOrientationChange.onOrientationChanged(CameraView.java:655) at android.view.OrientationEventListener$SensorEventListenerImpl.onSensorChanged(OrientationEventListener.java:143) at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:481) at android.os.MessageQueue.nativePollOnce(MessageQueue.java) at android.os.MessageQueue.next(MessageQueue.java:323) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5422) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

I have no clue how I can process this error so I can just provide an dialog to the user asking to restart the app instead. While reading the cwac-cam library you use I found that they provide an onCameraFail method. Could you perhaps assist me in finding a solution for this? :)

Thanks alot!! Love your work.

Glide Issues Please Solve it

I am using the Glide version 4.9.0 and library uses 3.6.1, due to which app crashes.
Can please the version be upgraded?

Configuration Issue

I put all the dependencies as mentioned. After, gradle throws configuration error of:
Error:Failed to resolve: com.commonsware.cwac:camera:0.6.+

Please help me regarding this error

Flash not working in samsung

The flash mode is not working . So it's unable to took photos at night or in low light condition . Please have a look

Does not work on emulator

The application crashes when using on emulator. Didn't find any logs or stack trace.

PS: The camera is enabled on AVD and uses webcam.

Tablet cameraheight

On tablet or basically any device, it should fit the container.
Right now on my tablet the size of the camera is extremely small, and I cant change it from the default one.

Getting error after import this project from github. working fine in device but not run in Nexus-S 4.1.1. please help me to solve this problem.

Please check here too:- https://stackoverflow.com/questions/49462677/how-to-solve-camera-startpreview-in-tedpicker-master-library?noredirect=1#comment85928790_49462677

E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: startPreview failed at android.hardware.Camera.startPreview(Native Method) at com.commonsware.cwac.camera.CameraView.startPreview(CameraView.java:533) at com.commonsware.cwac.camera.CameraView.initPreview(CameraView.java:528) at com.commonsware.cwac.camera.CameraView.onMeasure(CameraView.java:203) at android.view.View.measure(View.java:15172) at android.widget.RelativeLayout.measureChild(RelativeLayout.java:602) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:415) at android.view.View.measure(View.java:15172) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) at android.view.View.measure(View.java:15172) at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1560) at android.view.View.measure(View.java:15172) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) at android.view.View.measure(View.java:15172) at android.widget.RelativeLayout.measureChild(RelativeLayout.java:602) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:415) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) at android.view.View.measure(View.java:15172) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) at android.view.View.measure(View.java:15172) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:525) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4745) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)

Fatal error on pressing the image capture button with Samsung Galaxy S3 Neo

With the library integrated and working on every device I have, the app crashes with a OutOfMemoryError when the 'image capture' is pressed on the Samsung Galaxy S3 Neo device.

Model Number : GT I9300I
Android version : 4.3

Stacktrace :

FATAL EXCEPTION: Thread-1859
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:512)
at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:530)
at com.gun0912.tedpicker.CwacCameraFragment$MyCameraHost.saveImage(CwacCameraFragment.java:476)
at com.commonsware.cwac.camera.ImageCleanupTask.run(ImageCleanupTask.java:166)

Failed to resolve cwac camera 0.6.+

Please maintain the library to solve this issue.

"Error:Failed to resolve: com.commonsware.cwac:camera:0.6.+"

Currently im only able to build my app with "gradle offline work" - when im using another machine i will possibly not be able to build my app, because is no offline cached version of cwac camera.

Thanks

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.