TIFFLoader.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {
  2. DataTextureLoader,
  3. LinearFilter,
  4. LinearMipmapLinearFilter
  5. } from 'three';
  6. import UTIF from '../libs/utif.module.js';
  7. /**
  8. * A loader for the TIFF texture format.
  9. *
  10. * ```js
  11. * const loader = new TIFFLoader();
  12. * const texture = await loader.loadAsync( 'textures/tiff/crate_lzw.tif' );
  13. * texture.colorSpace = THREE.SRGBColorSpace;
  14. * ```
  15. *
  16. * @augments DataTextureLoader
  17. * @three_import import { TIFFLoader } from 'three/addons/loaders/TIFFLoader.js';
  18. */
  19. class TIFFLoader extends DataTextureLoader {
  20. /**
  21. * Constructs a new TIFF loader.
  22. *
  23. * @param {LoadingManager} [manager] - The loading manager.
  24. */
  25. constructor( manager ) {
  26. super( manager );
  27. }
  28. /**
  29. * Parses the given TIFF texture data.
  30. *
  31. * @param {ArrayBuffer} buffer - The raw texture data.
  32. * @return {DataTextureLoader~TexData} An object representing the parsed texture data.
  33. */
  34. parse( buffer ) {
  35. const ifds = UTIF.decode( buffer );
  36. UTIF.decodeImage( buffer, ifds[ 0 ] );
  37. const rgba = UTIF.toRGBA8( ifds[ 0 ] );
  38. return {
  39. width: ifds[ 0 ].width,
  40. height: ifds[ 0 ].height,
  41. data: rgba,
  42. flipY: true,
  43. magFilter: LinearFilter,
  44. minFilter: LinearMipmapLinearFilter
  45. };
  46. }
  47. }
  48. export { TIFFLoader };