-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Initial work to add Options config * Use a single encoder instance and retry up to 10 times on failure. * Switch both sides to allow encoding from the source image, add options configuration for each. * Styling for options (and a few tweaks for the app) * Dep updates. * Remove commented out code. * Fix Encoder typing * Fix lint issues * Apparently I didnt have tslint autofix enabled on the chromebook * Attempt to fix layout/panning issues * Fix missing custom element import! * Fix variable naming, remove dynamic encoder names, remove retry, allow encoders to return ImageData. * Refactor state management to use an Array of objects and immutable updates instead of relying on explicit update notifications. * Add Identity encoder, which is a passthrough encoder that handles the "original" view. * Drop comlink-loader into the project and add ".worker" to the jpeg encoder filename so it runs in a worker (:unicorn:) * lint fixes. * cleanup * smaller PR feedback fixes * rename "jpeg" codec to "MozJpeg" * Formatting fixes for Options * Colocate codecs and their options UIs in src/codecs, and standardize the namings * Handle canvas errors * Throw if quality is undefined, add default quality * add note about temp styles * add note about temp styles [2] * Renaming updateOption * Clarify option input bindings * Move updateCanvas() to util and rename to drawBitmapToCanvas * use generics to pass through encoder options * Remove unused dependencies * fix options type * const * Use `Array.prototype.some()` for image loading check * Display encoding errors in the UI. * I fought typescript and I think I won * This doesn't need to be optional * Quality isn't optional * Simplifying comlink casting * Splitting counters into loading and displaying * Still loading if the loading counter isn't equal.
- Loading branch information
1 parent
65847c0
commit 3035a68
Showing
19 changed files
with
497 additions
and
14,574 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import * as mozJPEG from './mozjpeg/encoder'; | ||
import { EncoderState as MozJPEGEncodeData, EncodeOptions as MozJPEGEncodeOptions } from './mozjpeg/encoder'; | ||
import * as identity from './identity/encoder'; | ||
import { EncoderState as IdentityEncodeData, EncodeOptions as IdentityEncodeOptions } from './identity/encoder'; | ||
|
||
export type EncoderState = IdentityEncodeData | MozJPEGEncodeData; | ||
export type EncoderOptions = IdentityEncodeOptions | MozJPEGEncodeOptions; | ||
export type EncoderType = keyof typeof encoderMap; | ||
|
||
export const encoderMap = { | ||
[identity.type]: identity, | ||
[mozJPEG.type]: mozJPEG | ||
}; | ||
|
||
export const encoders = Array.from(Object.values(encoderMap)); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
export interface EncodeOptions {} | ||
export interface EncoderState { type: typeof type; options: EncodeOptions; } | ||
|
||
export const type = 'identity'; | ||
export const label = 'Original image'; | ||
export const defaultOptions: EncodeOptions = {}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import EncoderWorker from './EncoderWorker'; | ||
|
||
export interface EncodeOptions { quality: number; } | ||
export interface EncoderState { type: typeof type; options: EncodeOptions; } | ||
|
||
export const type = 'mozjpeg'; | ||
export const label = 'MozJPEG'; | ||
export const mimeType = 'image/jpeg'; | ||
export const extension = 'jpg'; | ||
export const defaultOptions: EncodeOptions = { quality: 7 }; | ||
|
||
export async function encode(data: ImageData, options: EncodeOptions) { | ||
// We need to await this because it's been comlinked. | ||
const encoder = await new EncoderWorker(); | ||
return encoder.encode(data, options); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import { h, Component } from 'preact'; | ||
import { EncodeOptions } from './encoder'; | ||
import { bind } from '../../lib/util'; | ||
|
||
type Props = { | ||
options: EncodeOptions, | ||
onChange(newOptions: EncodeOptions): void | ||
}; | ||
|
||
export default class MozJpegCodecOptions extends Component<Props, {}> { | ||
@bind | ||
onChange(event: Event) { | ||
const el = event.currentTarget as HTMLInputElement; | ||
this.props.onChange({ quality: Number(el.value) }); | ||
} | ||
|
||
render({ options }: Props) { | ||
return ( | ||
<div> | ||
<label> | ||
Quality: | ||
<input | ||
name="quality" | ||
type="range" | ||
min="1" | ||
max="100" | ||
step="1" | ||
value={'' + options.quality} | ||
onChange={this.onChange} | ||
/> | ||
</label> | ||
</div> | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.