Git Product home page Git Product logo

mediabrowser's Introduction

title

License: MIT Swift iOS 8.1+ travis CocoaPods CocoaDocs Carthage ReadMe-KR

Introduction

🏞 MediaBrowser can display one or more images or videos by providing either UIImage objects, PHAsset objects, or URLs to library assets, web images/videos or local files. MediaBrowser handles the downloading and caching of photos from the web seamlessly. Photos can be zoomed and panned, and optional (customisable) captions can be displayed. This can also be used to allow the user to select one or more photos using either the grid or main image view.

Also, MediaBrowser use latest SDWebImage version for caching, motivated by MWPhotoBrowser

Single Photo Multiple Photos And Video
SinglePhoto MultiplePhotosAndVideo
Multiple Photo Grid Multiple Photo Selection
MultiplePhotoGrid PhotoSelection
Web Photos Web Photos Grid
WebPhotos WebPhotoGrid

Requirements

MediaBrowser is written in Swift 5.0 Compatible with iOS 8.0+

Usage

Basic

Get MediaBrowser and set MediaBrowserDelegate

let browser = MediaBrowser(delegate: self)
self.navigationController?.pushViewController(browser, animated: true)

//MediaBrowserDelegate
func numberOfMedia(in mediaBrowser: MediaBrowser) -> Int {
  return mediaArray.count
}
    
func media(for mediaBrowser: MediaBrowser, at index: Int) -> Media {
  if index < mediaArray.count {
    return mediaArray[index]
  }
  return DemoData.localMediaPhoto(imageName: "MotionBookIcon", caption: "Photo at index is Wrong")
}

Advanced

CocoaDocs is the best place to start!

You can also see all usage in demo project.

Property Type
navigationBarTranslucent Bool
navigationBarTextColor UIColor
navigationBarTintColor UIColor
statusBarStyle UIStatusBarStyle
toolbarTextColor UIColor
toolbarBarTintColor UIColor
toolbarBackgroundColor UIColor
hasBelongedToViewController Bool
isVCBasedStatusBarAppearance Bool
statusBarShouldBeHidden Bool
displayActionButton Bool
leaveStatusBarAlone Bool
performingLayout Bool
rotating Bool
viewIsActive Bool
didSavePreviousStateOfNavBar Bool
skipNextPagingScrollViewPositioning Bool
viewHasAppearedInitially Bool
currentGridContentOffset CGPoint
zoomPhotosToFill Bool
displayMediaNavigationArrows Bool
displaySelectionButtons Bool
alwaysShowControls Bool
enableGrid Bool
enableSwipeToDismiss Bool
startOnGrid Bool
autoPlayOnAppear Bool
hideControlsOnStartup Bool
delayToHideElements TimeInterval
captionAlpha CGFloat
toolbarAlpha CGFloat
loadingIndicatorInnerRingColor UIColor
loadingIndicatorOuterRingColor UIColor
loadingIndicatorInnerRingWidth CGFloat
loadingIndicatorOuterRingWidth CGFloat
loadingIndicatorFont UIFont
loadingIndicatorFontColor UIColor
loadingIndicatorShouldShowValueText Bool
mediaSelectedOnIcon UIImage?
mediaSelectedOffIcon UIImage?
mediaSelectedGridOnIcon UIImage?
mediaSelectedGridOffIcon UIImage?
preCachingEnabled Bool
cachingImageCount Int
placeholderImage (image: UIImage, isAppliedForAll: Bool)?
Method Explanation
setCurrentIndex(at index: Int) Set current indexPath when start. Also, set first before preCachingEnabled
Delegate Explanation
func numberOfMedia(in mediaBrowser: MediaBrowser) -> Int Required protocol to use MediaBrowser. return media count
func media(for mediaBrowser: MediaBrowser, at index: Int) -> Media Required protocol to use MediaBrowser. return media
func mediaBrowserDidFinishModalPresentation(mediaBrowser: MediaBrowser) Optional protocol to mediaBrowser Did Finish Modal Presentation
func thumbnail(for mediaBrowser: MediaBrowser, at index: Int) -> Media Optional protocol to show thumbnail. return media. Recommand small size
func captionView(for mediaBrowser: MediaBrowser, at index: Int) -> MediaCaptionView? Optional protocol to show captionView. return MediaCaptionView.
func didDisplayMedia(at index: Int, in mediaBrowser: MediaBrowser) Optional protocol when need callback
func actionButtonPressed(at photoIndex: Int, in mediaBrowser: MediaBrowser) Optional protocol when need callback about action button
func isMediaSelected(at index: Int, in mediaBrowser: MediaBrowser) -> Bool Optional protocol when need callback about isMediaSelected
func mediaDid(selected: Bool, at index: Int, in mediaBrowser: MediaBrowser) Optional protocol when need callback about media selection
func title(for mediaBrowser: MediaBrowser, at index: Int) -> String? Optional protocol for title

Installation

Cocoapods

pod 'MediaBrowser'

Carthage

github "younatics/MediaBrowser"

References

Please tell me or make pull request if you use this library in your application :)

Updates

See CHANGELOG for details

Author

younatics Twitter

License

MediaBrowser is available under the MIT license. See the LICENSE file for more info.

mediabrowser's People

Contributors

atulkhatri avatar ayuzhin avatar bryanleezigbang avatar dongs0104 avatar eduardbosch avatar erichsu avatar iranjith4 avatar jeheon92 avatar kofktu avatar mnvr avatar mpowell avatar philchristensen avatar tommajor avatar urtaq avatar weakfl avatar younatics 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

mediabrowser's Issues

[Question] dynamic image size base on aspect ratio

Hello!

This a great framework, I want to use it but I want to make sure if this can help me with a issue I have with uiimageview / UIImage, currently I'm doing a slideshow gallery but the source images are downloaded from a web service, the issue is that the images downloaded can be of different aspect rations so what I want to achieved is that the downloaded image adapts to the width of the current screen size if it's a 16:9 or 9:16 the uiimageview with auto layout takes that size.

Thanks

Erick :D

Mixed videos/images navigation issues

If videos and images are used together the UIPageViewController navigation has issues (see attached video). To reproduce the issue just add an image to the "Web videos" demo.

Also it would be nice if the corresponding thumb would be displayed beneath the play button instead of the error image.

mixed_video_images.mp4.zip

Change GridController cell views size

Resizing the cells does not seem to be supported right now and it can't be done in an extension either since the class is not public.
It'd be great to either add the possibility or to let users override the sizeForItemAt delegate method.

Default implementation of actionButtonPressed is unreachable

In MediaBrowser.swift, line 2053

if let d = delegate {
    d.actionButtonPressed(at: currentPageIndex, in: self, sender: sender)
    return
}

The function will always return here, since the delegate should be set.
You should probably change the protocol extension to initiate the default behaviour (show UIActivityViewController) and just call it.

Tried to compile the example

I received a lot of compile errors and it tried to convert to swift 3? Why does it convert when its written in swift 3. Thanks.

Cannot form weak reference to instance of class MediaBrowser.

Hi,
Thanks for your great library!
I want to show multiplePhotoGrid() in the first app view controller. But i get this error:

Cannot form weak reference to instance (0x7faf25043a00) of class MediaBrowser.MediaBrowser. It is possible that this object was over-released, or is in the process of deallocation.

And xcode point to line 64 in the MediaBrowser.swift file.

Thanks

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()
    let mainVC = ViewController()
    window?.rootViewController = mainVC
    
    return true
}

ViewController.swift

class ViewController: UIViewController, MediaBrowserDelegate {
    
    var selections = [Bool]()
    var mediaArray = [Media]()
    var thumbs = [Media]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let displayActionButton = true
        let displaySelectionButtons = false
        let displayMediaNavigationArrows = true
        let enableGrid = true
        let startOnGrid = false
        let autoPlayOnAppear = false
        
        mediaArray = DemoData.multiplePhotoGrid()
        thumbs = DemoData.multiplePhotoGrid()
        
        let browser = MediaBrowser(delegate: self)
        browser.displayActionButton = displayActionButton
        browser.displayMediaNavigationArrows = displayMediaNavigationArrows
        browser.displaySelectionButtons = displaySelectionButtons
        browser.alwaysShowControls = displaySelectionButtons
        browser.zoomPhotosToFill = true
        browser.enableGrid = enableGrid
        browser.startOnGrid = startOnGrid
        browser.enableSwipeToDismiss = true
        browser.autoPlayOnAppear = autoPlayOnAppear
        browser.cachingImageCount = 2
        browser.setCurrentIndex(at: 1)
        
        navigationController?.pushViewController(browser, animated: true)
        
    }
    
    func numberOfMedia(in mediaBrowser: MediaBrowser) -> Int {
        return mediaArray.count
    }
    
    func media(for mediaBrowser: MediaBrowser, at index: Int) -> Media {
        if index < mediaArray.count {
            return mediaArray[index]
        }
        return DemoData.localMediaPhoto(imageName: "MotionBookIcon", caption: "Photo at index is Wrong")
    }

}

Reload grid

How do we reload the contents of grid ?
I tried to reload the UICollectionView of MediaGridViewController, but it didn't work.

Toolbar transparency isn't working

You need to provide empty Images for transparency to work. In MediaBrowser.swift, lines 368 and 369:

toolbar.setBackgroundImage(UIImage(), forToolbarPosition: .any, barMetrics: .default)
toolbar.setBackgroundImage(UIImage(), forToolbarPosition: .any, barMetrics: .compact)

See Apple's documentation for details.
Changing the alpha of the toolbar will also change the alpha of the controls, which is undesirable imho.

3GP video makes video player non-responding

Playing 3GP video URLs in MediaPlayer makes it non-responding.
Done button, Next, Previous, Play/Pause buttons do nothing. Volume slider in the bottom responds to user touch (panning).

jerky movement in swiping scroll view in demo project

When slowly swiping between multiple photos in the demo project, the scrolling view movement is:

  • sometimes not smooth, especially when slowly, lightly swiping left or right
  • sometimes stops between adjacent images at the end of the swipe animation

behavior was observed running under XCode 9.0.1, swift 4, iPhone 7.

Memorywarning kills app

I have 229 lores pictures (about 1 mb each). When in grid view as I swipe down, memory goes up until finally the app crashes. Is there just a picture limit?

Share Video

support video sharing, like you can do for images

Carthage compatibility

Has anyone got this to work using Carthage?

There is no Cartfile in the project for SDWebImage and UICircularProgressRing. Adding these frameworks to the project's Cartfile (as documented) results in build errors like these:

/Users/josvanvelzen/projects/socialschools-ios/Carthage/Checkouts/MediaBrowser/MediaBrowser/MediaZoomingScrollView.swift:10:8: error: no such module 'UICircularProgressRing'
import UICircularProgressRing
       ^

also, in the build phases there is a hard dependency to CocoaPods

PhaseScriptExecution [CP]\ Check\ Pods\ Manifest.lock /Users/josvanvelzen/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/MediaBrowser/2.0.6/Build/Intermediates.noindex/ArchiveIntermediates/MediaBrowser/IntermediateBuildFilesPath/MediaBrowser.build/Release-iphoneos/MediaBrowser.build/Script-0C26AE7EAC3BB33AE3116C77.sh
    cd /Users/josvanvelzen/projects/socialschools-ios/Carthage/Checkouts/MediaBrowser
    /bin/sh -c /Users/josvanvelzen/Library/Caches/org.carthage.CarthageKit/DerivedData/9.2_9C40b/MediaBrowser/2.0.6/Build/Intermediates.noindex/ArchiveIntermediates/MediaBrowser/IntermediateBuildFilesPath/MediaBrowser.build/Release-iphoneos/MediaBrowser.build/Script-0C26AE7EAC3BB33AE3116C77.sh
diff: /Podfile.lock: No such file or directory
diff: /Manifest.lock: No such file or directory
error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.

I am no expert in this, I added the Cartfile in the Carthage/Checkouts/MediaBrowser which does resolve the dependencies but I probably will still have to link to frameworks somehow.

Has anyone got this to work using carthage only?

Questions regarding using MediaBrowser with firebase

Currently, my backend is supported by firebase, which is an cloud-hosted database that queries asynchronously. Currently it fetchs the list of picture urls from firebase. With the example provided in MediaBrowserSample, it seems like the number of pictures need to be predetermined before calling the browser or exception will be thrown. Is there any workaround on that? To display the pictures correctly while still fetching the data in the backend?

No doneButton (rightBarButtonItem)

If there are no images then the doneButton does not appear.

I used a simple setup:

let photoBrowser = MediaBrowser(delegate: self)
photoBrowser.enableGrid = true
photoBrowser.startOnGrid = true
present(UINavigationController(rootViewController: photoBrowser), animated: true, completion: nil)

[request] Change Media access level to open

Would you mind changing the access level of the Media class to open?

I'd like to use your library in a project with some legacy objective-c code. Writing a wrapper class was straight forward, however, I'd need to subclass Media to make it work.

Of course I could fork, but would prefer no to...

Can't get it to work in ObjC Project

I've tried days to get it to work but just can't figure it out. If I link the framework, the app crashes.
If I however link it as optional instead of required, I can run it but every Object in the Framework is always nil. (For example [[Media alloc] init] always returns nil)

In the Issues section, I've seen that others went through this too. Does anyone have an idea?

Error on MediaBrowser(media: [Media])

Hello sir, when i use code like bottom to browser ,it doesn't show image and swipegesture doesn't work. so it's must have a delegate?

func showPhotoBrowser(photos: [Any], atIndex: Int, viewController: UIViewController) {
    
    var tempArray = [Media]()
    
    for i in photos{
        if i is UIImage{
            let photo = Media(image: i as! UIImage)
            tempArray .append(photo)
        }
        
        if i is String{
            let photo = Media(url: i as! URL)
            tempArray .append(photo)
        }
    }
    
    let browser = MediaBrowser(media: tempArray)
    browser.setCurrentIndex(at: atIndex)
    let nc = UINavigationController.init(rootViewController: browser)
    nc.modalTransitionStyle = .crossDissolve
    viewController.present(nc, animated: true, completion: nil)
}

Black bars flash for a second when pushing back.

There seems to be a weird bug - that does not affect MediaBrowser only - in which a black bar shows up for a second when popping back from the MediaBrowser view controller. You can observe said behavior on the gifs provided by the project itself.

Black Bars

You can see the image show up for a second when the browser pushes back. At first I didn't think it was so bad, but it can be bit surprising when you actually see the bars happening on your device.

Here's a still shot of the black bar:

Black bar

MWPhotoBrowser also has this problem.

Problem with changing the appearance of navigation bar

I'm am using this SDK for displaying images downloaded from a URL.
I have a table view controller which is responsible for presenting the media browser. I can't change the navigation item's title and back bar button. When I dismiss the media browser, the navigation item's title color is blue in the table view controller, and I want to change the blue color to white.
Can you help me?

Thanks,
Zsolt.

Video thumbnail position issue

Video thumbnail is not showing in center of the screen.
Could you please verify that it is a bug in the library and following code is correct for now?

I have applied following solution for now:
Replace displayingVideo() condition with following lines of code in - func setMaxMinZoomScalesForCurrentBounds()

// If it's a video then disable zooming
if displayingVideo() {
zoomScale = maxScale
maximumZoomScale = zoomScale
minimumZoomScale = zoomScale
}

Does it support FLV video format?

Hello.

Does it support FLV video format?

What I've done:
Have local video and screenshots in /Documents/... folder.

  1. Successfully append to [Media].
  2. Shows in grid and Full screen works
  3. When tap on video show blank player, and on console shows "Media file format not supported" detailed error on below.

[Playback] Using <MPAVItem: 0x128945480> to resolve error Error Domain=AVFoundationErrorDomain Code=-11828 "Не удается открыть" UserInfo={NSLocalizedFailureReason=Формат медиафайла не поддерживается., NSLocalizedDescription=Не удается открыть, NSUnderlyingError=0x1d0657520 {Error Domain=NSOSStatusErrorDomain Code=-12847 "(null)"}}

[Playback] ❗️Resolution for item <MPAVItem: 0x128945480> could not resolve error: Error Domain=AVFoundationErrorDomain Code=-11828 "Не удается открыть" UserInfo={NSLocalizedFailureReason=Формат медиафайла не поддерживается., NSLocalizedDescription=Не удается открыть, NSUnderlyingError=0x1d0657520 {Error Domain=NSOSStatusErrorDomain Code=-12847 "(null)"}} with resolution error: (null)

[Playback] ❗️Playback failed with error: Error Domain=AVFoundationErrorDomain Code=-11828 "Не удается открыть" UserInfo={NSLocalizedFailureReason=Формат медиафайла не поддерживается., NSLocalizedDescription=Не удается открыть, NSUnderlyingError=0x1d0657520 {Error Domain=NSOSStatusErrorDomain Code=-12847 "(null)"}}, not resolving (canResolve: NO, allowsItemErrorResolution: NO)

[Playback] ❗️Failed to queue any items.

Some videos not play from URLs

I have used this sdk for images and videos playing by Url in some urls its working fine but in some we are getting
url: http://www.youtube.com/watch?v=8hwCwD589S8

CredStore - performQuery - Error copying matching creds. Error=-25300, query={
class = inet;
"m_Limit" = "m_LimitAll";
"r_Attributes" = 1;
sync = syna;
}
2019-03-13 11:08:46.867861+0530 MediaBrowserDemo[338:32267] [] <<<< AVOutputDeviceDiscoverySession (FigRouteDiscoverer) >>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery mode to DiscoveryMode_None (client: MediaBrowserDemo)

Crash if loading progress is infinite

See #30

It actually crashes in UICircularProgressRing, but imho you should avoid passing infinite values to UICircularProgressRing anyway.

NOTE: It might be more appropriate to use min(0, CGFloat(receivedSize)/CGFloat(expectedSize)), I didn't really investigate the actual values. But I guess expectedSize was zero when it crashed...

MediaBrowser.framework won't build with Carthage

Carthage won't build the MediaBrowser.framework.
The other depending Frameworks (SDWebImage and UICircularProgressRing) causes no issues.

Please check that out :)

Here is my Carthage output:

$ carthage update MediaBrowser

*** Fetching MediaBrowser
*** Fetching SDWebImage
*** Fetching UICircularProgressRing
*** Checking out UICircularProgressRing at "v1.8.5"
*** Checking out MediaBrowser at "2.1.1"
*** Checking out SDWebImage at "4.3.3"
*** xcodebuild output can be found in /var/folders/gc/ycc_9gmn5td8mkjyr5glhyqm0000gn/T/carthage-xcodebuild.sHRf9v.log
*** Downloading UICircularProgressRing.framework binary at "Version 1.8.5"
*** Building scheme "SDWebImage OSX" in SDWebImage.xcworkspace
*** Building scheme "SDWebImage tvOS" in SDWebImage.xcworkspace
*** Building scheme "SDWebImage iOS" in SDWebImage.xcworkspace
*** Building scheme "SDWebImage watchOS" in SDWebImage.xcworkspace
*** Building scheme "MediaBrowser" in MediaBrowser.xcworkspace
Build Failed
	Task failed with exit code 65:
	/usr/bin/xcrun xcodebuild -workspace /Users/<USER>/<PROJECT_PATH>/Carthage/Checkouts/MediaBrowser/MediaBrowser.xcworkspace -scheme MediaBrowser -configuration Release -derivedDataPath /Users/<USER>/Library/Caches/org.carthage.CarthageKit/DerivedData/9.3_9E145/MediaBrowser/2.1.1 -sdk iphoneos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES archive -archivePath /var/folders/gc/ycc_9gmn5td8mkjyr5glhyqm0000gn/T/MediaBrowser SKIP_INSTALL=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=NO CLANG_ENABLE_CODE_COVERAGE=NO STRIP_INSTALLED_PRODUCT=NO (launched in /Users/<USER>/<PROJECT_PATH>/Carthage/Checkouts/MediaBrowser)

This usually indicates that project itself failed to compile. Please check the xcodebuild log for more details: /var/folders/gc/ycc_9gmn5td8mkjyr5glhyqm0000gn/T/carthage-xcodebuild.sHRf9v.log

Issues leveraging MediaBrowser in Objective C app

I've been working on getting MediaBrowser properly installed in my application, which is an Objective C app from 2013 that I've been updating for the latest OS, iPhone, etc.

I had to make a few minor changes to the library (submitted as a PR) to get it to be available to my Objective C code, but overall everything is working pretty well. I just have a couple issues I'm looking for help with.

  1. For some reason, the grid button on the bottom nav bar seems to be inconsistent as to whether it appears or not. I've seen it display properly once, but I can't get it to happen again. I've tried forcing the enableGrid property, but to no avail.
  2. The second issue is related to video assets when paging through the browser. From the demo it looks like there's supposed to be a play button overlay; in my app the poster image of the video appears and is properly tappable, but it shows no indication of that.

I've gone through the demo app in some detail, but I can't see anything special that needs to be done to enable either of these features, so I assume it must be an issue between ObjC and Swift. Any guidance in this issue would be greatly appreciated.

Photo browser is not accessible

The photo browser does not work with Voice Over. E.g., it doesn't read label correctly, and it does not read photo descriptions at all.

Are you guys interested in making it accessible?

Callback for prev/next button click

This is really cool project, I already integrated this one into my app. It has almost functional but I hope you could add callback for prev/next button click event. That help the app can control more from your lib.

Ex: app can preload the next section when user at the end of a chapter and press next button

That is worth to fight, right !?

Thank for your hard working!

Issue with Selection and Action button together

Hi younatics,

thanks for a great media browser, I came here from MWPhotoBrowser, which is not maintained anymore, and I like your project.

I need the selection feature and the action button together in use case "Photo selection grid".
If I do this, the action button moves to the upper right corner and hides the "Done" button and its function.
I did a quick fix for this, commenting this line out in updateNavigation():
self.navigationItem.rightBarButtonItem = ab

which fixes the issue.
Could you please maybe add an extra option / public setter for this case, or do you accept a pull request for this? My fix workes for me, but want to stay in sync with this repo for further updates.


Also, another minor issue:
If I tap a photo in the grid, the blue selection image is briefly show all though the photo was not selected, while the grid view is animating out.
I debugged this and found out it seems to happen below this line, in the animation:
// Animate, hide grid and show paging scroll view

Can you think of a way to fix this?

Thanks,

SDWebImage dependency is outdated

s.dependency 'SDWebImage', '~> 4.1.2'

Please update your podspec, currently it doesn't allow to install the latest version of SDWebImage (4.2.0).

Something about the license

Hello, Seungyoun Yi. Thanks for your project, I will use it in my close-source app. I have a question about the copyright about the image resources in your project. First of all, could I use the interface icons directly in my app or should I design and replace them all? Secondary, could I use those beautiful pictures in the demo?

I don't know the source of those pictures and icons and care about their copyright. Wish you give me some advice and reply. Thank you.

Also, I want to know if Mit license or other code license like Apache license still work for image resources?

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.