react-native-image-colors
Version:
Fetch prominent colors from an image.
51 lines • 1.74 kB
JavaScript
// Import the native module. On web, it will be resolved to RNImageColors.web.ts
// and on native platforms to RNImageColors.ts
import { Image } from 'react-native';
import { cache } from './cache';
import RNImageColorsModule from './module';
const MAX_KEY_LEN = 500;
const resolveImageSource = (source) => {
if (typeof source === 'string') {
return source;
}
else {
return Image.resolveAssetSource(source).uri;
}
};
/**
*
* @param uri - source of the image. Can be a remote URL, a base64 string or a local file path.
* ```ts
* const fromUrl = await getColors('https://example.com/image.jpg')
*
* const fromBase64 = await getColors('data:image/jpeg;base64,/9j/4Ri...')
*
* const fromLocalFile = await getColors(require('./images/cat.jpg'))
* ```
* @param config - configuration
*/
const getColors = async (uri, config = {}) => {
const resolvedSrc = resolveImageSource(uri);
if (config?.cache) {
const cachedResult = config.key
? cache.getItem(config.key)
: cache.getItem(resolvedSrc);
if (cachedResult)
return cachedResult;
}
const result = await RNImageColorsModule.getColors(resolvedSrc, config);
if (config?.cache) {
if (!config.key && resolvedSrc.length > MAX_KEY_LEN) {
throw new Error(`You enabled caching, but you didn't pass a key. We fallback to using the image URI as the key. However the URI is longer than ${MAX_KEY_LEN}. Please pass a short unique key.`);
}
cache.setItem(config.key ?? resolvedSrc, result);
}
return result;
};
const ImageColors = {
getColors,
cache,
};
export default ImageColors;
export { getColors, cache };
//# sourceMappingURL=index.js.map