Buckets:
| import { createElementNS } from '../utils.js'; | |
| import { SRGBToLinear } from '../math/ColorManagement.js'; | |
| let _canvas; | |
| class ImageUtils { | |
| static getDataURL( image ) { | |
| if ( /^data:/i.test( image.src ) ) { | |
| return image.src; | |
| } | |
| if ( typeof HTMLCanvasElement === 'undefined' ) { | |
| return image.src; | |
| } | |
| let canvas; | |
| if ( image instanceof HTMLCanvasElement ) { | |
| canvas = image; | |
| } else { | |
| if ( _canvas === undefined ) _canvas = createElementNS( 'canvas' ); | |
| _canvas.width = image.width; | |
| _canvas.height = image.height; | |
| const context = _canvas.getContext( '2d' ); | |
| if ( image instanceof ImageData ) { | |
| context.putImageData( image, 0, 0 ); | |
| } else { | |
| context.drawImage( image, 0, 0, image.width, image.height ); | |
| } | |
| canvas = _canvas; | |
| } | |
| if ( canvas.width > 2048 || canvas.height > 2048 ) { | |
| console.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image ); | |
| return canvas.toDataURL( 'image/jpeg', 0.6 ); | |
| } else { | |
| return canvas.toDataURL( 'image/png' ); | |
| } | |
| } | |
| static sRGBToLinear( image ) { | |
| if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || | |
| ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || | |
| ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { | |
| const canvas = createElementNS( 'canvas' ); | |
| canvas.width = image.width; | |
| canvas.height = image.height; | |
| const context = canvas.getContext( '2d' ); | |
| context.drawImage( image, 0, 0, image.width, image.height ); | |
| const imageData = context.getImageData( 0, 0, image.width, image.height ); | |
| const data = imageData.data; | |
| for ( let i = 0; i < data.length; i ++ ) { | |
| data[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255; | |
| } | |
| context.putImageData( imageData, 0, 0 ); | |
| return canvas; | |
| } else if ( image.data ) { | |
| const data = image.data.slice( 0 ); | |
| for ( let i = 0; i < data.length; i ++ ) { | |
| if ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) { | |
| data[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 ); | |
| } else { | |
| // assuming float | |
| data[ i ] = SRGBToLinear( data[ i ] ); | |
| } | |
| } | |
| return { | |
| data: data, | |
| width: image.width, | |
| height: image.height | |
| }; | |
| } else { | |
| console.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' ); | |
| return image; | |
| } | |
| } | |
| } | |
| export { ImageUtils }; | |
Xet Storage Details
- Size:
- 2.5 kB
- Xet hash:
- 8f137c205c3340b1e3de91e069f9d4e72cc730f3b33a1c17908266d3daa4100e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.