Site
- starting pong game 3d
This commit is contained in:
129
site/node_modules/three/src/extras/ImageUtils.js
generated
vendored
Normal file
129
site/node_modules/three/src/extras/ImageUtils.js
generated
vendored
Normal file
@ -0,0 +1,129 @@
|
||||
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 };
|
Reference in New Issue
Block a user