ImageViewer

Visualizador de imagens independente que renderiza um ImageSource (URL, base64 ou bytes raw) e camadas de Chrome opcional por cima: um quadro com borda, uma barra de ferramentas com rotação / virar / zoom / tela cheia, botões de download e interações de corte. Para edição vinculada a colunas (drop zone, upload, validação), use ImageEdit em vez disso.

Sem

Padrão — tamanho simples <img> em relação ao pai. Sem cromo.

Exemplo de reação
Exemplo de Blazor
600x400.png
React TypeScript
Razor

Emoldurado + Baixável

Adiciona uma borda, preenchimento e um botão de download no canto. Essa é a forma ImageEdit de pré-visualização somente leitura que usa.

Exemplo de reação
Exemplo de Blazor
placeholder.png
React TypeScript
Razor

Barra de Ferramentas

Adiciona rotação (CCW/CW), virar (H/V), zoom/out, reset, tela cheia e download. A imagem responde ao zoom da roda (ancorado no cursor) e, quando ampliada além de 1×, ao arrastar para panorama.

Exemplo de reação
Exemplo de Blazor
placeholder.png
React TypeScript
Razor

Barra de ferramentas + Cortável

Ativa um seletor de proporção e um botão de Recorte. Arrastar à esquerda na imagem desenha um retângulo de seleção tracejado (restrito ao aspecto escolhido). Pressionar Recortar rasteriza a seleção para PNG via uma tela fora da tela e dispara OnCropApplied; o visualizador então exibe o resultado cortado. O reset retorna à fonte original.

Exemplo de reação
Exemplo de Blazor
placeholder.png
React TypeScript
Razor
React Blazor

ImageViewer Classe

Parâmetros

Nome
Tipo
Padrão
Descrição
Altstring?
Texto alternativo acessível. O padrão é ImageViewer.FileName se estiver desconfigurado.
Croppablebool
False
Quando verdadeiro (e ImageViewer.Toolbar também é verdadeiro), permite interações com culturas: a barra de ferramentas ganha um seletor de proporção e um botão de Recorte; arrasto à esquerda no a imagem desenha um retângulo de seleção tracejado. Pressionar Recortar rasteriza a seleção para PNG e dispara ImageViewer.OnCropApplied; o visualizador então exibe o resultado recortado. O reset retorna ao original ImageViewer.Source. Configurar isso também adiciona crossorigin='anônimo' à <img> assim, o rasterizador pode ler os pixels de volta via ToBlob. Para ImageSource.Url ou seja, o servidor remoto deve enviar Acesso-Controle-Permitir Origem para que a imagem carregue; se for não faz isso, mude para ImageSource.Bytes (que resolve para a mesma origem data URL e não está sujeito a contaminação canvas).
Downloadablebool
False
Quando verdade, expõe uma experiência de usuário para download: Com ImageViewer.Toolbar, adiciona um botão de download à barra de ferramentas. Com ImageViewer.Framed (sem barra de ferramenta), renderiza um botão de sobreposição no canto. Sem nenhum dos dois, a imagem em si clica para baixar.
FallbackRenderFragment?
Renderizado quando ImageViewer.Source é nulo.
FileNamestring?
Nome do arquivo usado ao baixar e como texto padrão ImageViewer.Alt . Volta à própria ImageSource.FileNameimagem, que é outra ' imagem' da fonte.
Framedbool
False
Quando for verdadeiro, envolve a imagem em um quadro com borda com token Fluente correspondente o estilo de pré-visualização somente leitura usado pelo ImageEdit. False padrão (imaginação nua).
IsDirtybool
False
Estado sujo atual — verdadeiro quando a imagem exibida difere da Base (rotação, virada ou cultura aplicada). Estado puro de visão (zoom, panorama) Não alterna com o 'sujo' sozinho.
OutputFormatImageOutputFormat
Auto
Formato de saída para o resultado do corte rasterizado (e a imagem comprometida bytes de ImageViewer.CommitAsync). Padrão para ImageOutputFormat.Auto — o formato é derivado do extensão do arquivo source (entradas JPEG permanecem JPEG, todo o resto emite PNG). Pin para ImageOutputFormat.Png escritas sem perda independentemente da fonte, ou ImageOutputFormat.Jpeg para Fluxos fotográficos sensíveis ao tamanho.
OutputQualitydouble
0,9
Qualidade JPEG em [0, 1]. Ignorado quando ImageViewer.OutputFormat é ImageOutputFormat.Png (PNG é sem perdas e não possui botão de qualidade). Padrão para 0,9 — visualmente indistinguível do original para a maioria das fotos, ainda assim economizando bastante em comparação com PNG.
SourceImageSource?
Dados de imagem para renderizar. Quando nulo, ImageViewer.Fallback é renderizado em vez disso (ou nada se não houver reserva).
Toolbarbool
False
Quando o verdadeiro é o resultado, renderiza uma barra de ferramentas acima da imagem com rotação / virar / ampliar / Resetar / controles em tela cheia. Implica um elemento de envolvimento independentemente de ImageViewer.Framed. O arrastar para panorama na imagem fica disponível quando Passou da 1×.
Nome: Alt
Tipo: string?
Descrição: Texto alternativo acessível. O padrão é ImageViewer.FileName se estiver desconfigurado.
Nome: Croppable
Tipo: bool
Padrão: False
Descrição: Quando verdadeiro (e ImageViewer.Toolbar também é verdadeiro), permite interações com culturas: a barra de ferramentas ganha um seletor de proporção e um botão de Recorte; arrasto à esquerda no a imagem desenha um retângulo de seleção tracejado. Pressionar Recortar rasteriza a seleção para PNG e dispara ImageViewer.OnCropApplied; o visualizador então exibe o resultado recortado. O reset retorna ao original ImageViewer.Source. Configurar isso também adiciona crossorigin='anônimo' à <img> assim, o rasterizador pode ler os pixels de volta via ToBlob. Para ImageSource.Url ou seja, o servidor remoto deve enviar Acesso-Controle-Permitir Origem para que a imagem carregue; se for não faz isso, mude para ImageSource.Bytes (que resolve para a mesma origem data URL e não está sujeito a contaminação canvas).
Nome: Downloadable
Tipo: bool
Padrão: False
Descrição: Quando verdade, expõe uma experiência de usuário para download: Com ImageViewer.Toolbar, adiciona um botão de download à barra de ferramentas. Com ImageViewer.Framed (sem barra de ferramenta), renderiza um botão de sobreposição no canto. Sem nenhum dos dois, a imagem em si clica para baixar.
Nome: Fallback
Tipo: RenderFragment?
Descrição: Renderizado quando ImageViewer.Source é nulo.
Nome: FileName
Tipo: string?
Descrição: Nome do arquivo usado ao baixar e como texto padrão ImageViewer.Alt . Volta à própria ImageSource.FileNameimagem, que é outra ' imagem' da fonte.
Nome: Framed
Tipo: bool
Padrão: False
Descrição: Quando for verdadeiro, envolve a imagem em um quadro com borda com token Fluente correspondente o estilo de pré-visualização somente leitura usado pelo ImageEdit. False padrão (imaginação nua).
Nome: IsDirty
Tipo: bool
Padrão: False
Descrição: Estado sujo atual — verdadeiro quando a imagem exibida difere da Base (rotação, virada ou cultura aplicada). Estado puro de visão (zoom, panorama) Não alterna com o 'sujo' sozinho.
Nome: OutputFormat
Tipo: ImageOutputFormat
Padrão: Auto
Descrição: Formato de saída para o resultado do corte rasterizado (e a imagem comprometida bytes de ImageViewer.CommitAsync). Padrão para ImageOutputFormat.Auto — o formato é derivado do extensão do arquivo source (entradas JPEG permanecem JPEG, todo o resto emite PNG). Pin para ImageOutputFormat.Png escritas sem perda independentemente da fonte, ou ImageOutputFormat.Jpeg para Fluxos fotográficos sensíveis ao tamanho.
Nome: OutputQuality
Tipo: double
Padrão: 0,9
Descrição: Qualidade JPEG em [0, 1]. Ignorado quando ImageViewer.OutputFormat é ImageOutputFormat.Png (PNG é sem perdas e não possui botão de qualidade). Padrão para 0,9 — visualmente indistinguível do original para a maioria das fotos, ainda assim economizando bastante em comparação com PNG.
Nome: Source
Tipo: ImageSource?
Descrição: Dados de imagem para renderizar. Quando nulo, ImageViewer.Fallback é renderizado em vez disso (ou nada se não houver reserva).
Nome: Toolbar
Tipo: bool
Padrão: False
Descrição: Quando o verdadeiro é o resultado, renderiza uma barra de ferramentas acima da imagem com rotação / virar / ampliar / Resetar / controles em tela cheia. Implica um elemento de envolvimento independentemente de ImageViewer.Framed. O arrastar para panorama na imagem fica disponível quando Passou da 1×.

Eventos

Nome
Tipo
Descrição
OnCancelEventCallback
Quando definido junto com ImageViewer.Toolbar, torna um vermelho proibido- botão círculo na extremidade direita da barra de ferramentas. Sempre ativado. Os consumidores normalmente usam isso para sair do modo de edição e descartar em andamento transforma — o espectador não reverte nada automaticamente por si só; Remontar (por exemplo, via @key) ou atualizar ImageViewer.Source para Apague seu estado interno.
OnClickEventCallback<MouseEventArgs>
Clique no manipulador no < >. Suprime o recurso de clicar para baixar.
OnCropAppliedEventCallback<CropResult>
Dispara quando o usuário faz um crop. Recebe a carga útil PNG rasterizada.
OnDirtyChangedEventCallback<bool>
Dispara sempre que ImageViewer.IsDirty muda. Aciona o botão de salvar dos pais Ativado estado sem votação.
OnSaveEventCallback
Quando definido junto com ImageViewer.Toolbar, gera um marcador verde no extremo direito da barra de ferramentas. O botão é desativado enquanto O espectador é limpo — não há nada para salvar. O manipulador de cliques é um incêndio- e-esqueça; o consumidor normalmente liga ImageViewer.CommitAsync daqui para bakar a imagem exibida para bytes para persistência. Projetado para o fluxo de edição do ImageEdit (commit edits back na coluna encadernada). Consumidores independentes podem usá-lo da mesma forma.
Nome: OnCancel
Tipo: EventCallback
Descrição: Quando definido junto com ImageViewer.Toolbar, torna um vermelho proibido- botão círculo na extremidade direita da barra de ferramentas. Sempre ativado. Os consumidores normalmente usam isso para sair do modo de edição e descartar em andamento transforma — o espectador não reverte nada automaticamente por si só; Remontar (por exemplo, via @key) ou atualizar ImageViewer.Source para Apague seu estado interno.
Nome: OnClick
Tipo: EventCallback<MouseEventArgs>
Descrição: Clique no manipulador no < >. Suprime o recurso de clicar para baixar.
Nome: OnCropApplied
Tipo: EventCallback<CropResult>
Descrição: Dispara quando o usuário faz um crop. Recebe a carga útil PNG rasterizada.
Nome: OnDirtyChanged
Tipo: EventCallback<bool>
Descrição: Dispara sempre que ImageViewer.IsDirty muda. Aciona o botão de salvar dos pais Ativado estado sem votação.
Nome: OnSave
Tipo: EventCallback
Descrição: Quando definido junto com ImageViewer.Toolbar, gera um marcador verde no extremo direito da barra de ferramentas. O botão é desativado enquanto O espectador é limpo — não há nada para salvar. O manipulador de cliques é um incêndio- e-esqueça; o consumidor normalmente liga ImageViewer.CommitAsync daqui para bakar a imagem exibida para bytes para persistência. Projetado para o fluxo de edição do ImageEdit (commit edits back na coluna encadernada). Consumidores independentes podem usá-lo da mesma forma.

Métodos

Nome
Parâmetros
Tipo
Descrição
CommitAsyncTask<CropResult>
Baka a imagem exibida atualmente — incluindo qualquer rotação e inverte — para um PNG na resolução de origem. Retorna nulo quando o o visualizador está limpo (nada para salvar) ou antes do apelido JS anexado. Qualquer seleção de culturas em andamento que não tenha sido comprometida via o botão Recortar é intencionalmente ignorado; clique em Recortar primeiro se Você quer que seja assado.
HandleContainerResizeImageMeasurements newMeasurements
void
Retorno de redimensionamento do contêiner — o ResizeObserver do lado JS dispara este (rAF- debounced) quando a caixa do contêiner de imagem muda de fora do nosso estado (um pai sendo esticado/redimensionado, o painel refluindo). A imagem se adapta via object-fit:contain, então as coordenadas container-pixel da seleção de corte não Alinhamento mais longo com o mesmo conteúdo de imagem. Ancore-o novamente usando a mesma capturar → antigo atualizar → reprojetar - nova viagem ImageViewer.HandleFullscreenChange(System.Boolean) de ida e volta utiliza: snapshot da seleção em coordenadas de pixels naturais contra o redimensionamento PRE as medidas que ainda mantermo, atualize para as medições PÓS-redimensionamento, então projetar de volta. Pulado no meio do arrasto — os condutores de arrasto controlam a geometria de seleção (e capturaram sua própria janela de grampo na partida de arrasto).
HandleFullscreenChangebool isFullscreen
Task
Callback de mudança em tela completa em nível de documento — JS reporta se o O elemento wrapper é atualmente o elemento em tela cheia do documento. Esculpir Passa por aqui também (não passa pelo botão da barra de ferramentas).
HandleKeyDownstring key
bool shiftKey
Task
Retorno de chamada keydown movido por JS para os atalhos do modo edit. Só fogo para as chaves que reivindicamos (o JS shim filtra por estado chave + modificador), Então não precisamos bloquear esse método em si. Fuga — invocar ImageViewer.OnCancel (se estiver com fio). Enter — commit a seleção como um recorte, se houver um ≥ 5×5; Caso contrário, ImageViewer.OnSave invoque se estiver sujo. + / = / / /_ — dá zoom in / out. 0 — redefinir zoom + panorâmica para identidade. Delete / Backspace — limpar a seleção. Teclas de seta — empurre a seleção 1 px (10 px com Shift).
HandleWheeldouble deltaY
double cursorRelX
double cursorRelY
Task
Callback com zoom na roda — JS encaminha cada tick de rolagem (deltaY) mais o O cursor está deslocado do centro do contêiner. A matemática de zoom ancorada segue React: pan_new = (1 − r) · cursorRel + r · pan_prev onde r = zoom_new / zoom_prev. Mantém o cursor sobre o mesmo local-imagem Aponte para o degrau do zoom.
ResetDirtyAsyncTask
Marca o visualizador como limpo sem alterar a imagem exibida. Uso após um Salvamento bem-sucedido: Os bytes cortados agora são a versão salva, então futuro As mudanças devem ser medidas com base nesse estado. Para reverter o display imagem para o original ImageViewer.Source E limpar sujo, use o Reset ou atualizar ImageViewer.Source.
RevertCropvoid
Remove apenas a sobreposição local de culturas — volta ao original ImageViewer.Source. Rotação e flips ficam onde o usuário tem, Então, se esses mudaram desde o último save, ImageViewer.IsDirty pode Permaneça fiel. Use o botão Reset da barra de ferramentas (ou atualização ImageViewer.Source) para uma reversão completa.
Nome: CommitAsync
Tipo: Task<CropResult>
Descrição: Baka a imagem exibida atualmente — incluindo qualquer rotação e inverte — para um PNG na resolução de origem. Retorna nulo quando o o visualizador está limpo (nada para salvar) ou antes do apelido JS anexado. Qualquer seleção de culturas em andamento que não tenha sido comprometida via o botão Recortar é intencionalmente ignorado; clique em Recortar primeiro se Você quer que seja assado.
Nome: HandleContainerResize
Parâmetros: ImageMeasurements newMeasurements
Tipo: void
Descrição: Retorno de redimensionamento do contêiner — o ResizeObserver do lado JS dispara este (rAF- debounced) quando a caixa do contêiner de imagem muda de fora do nosso estado (um pai sendo esticado/redimensionado, o painel refluindo). A imagem se adapta via object-fit:contain, então as coordenadas container-pixel da seleção de corte não Alinhamento mais longo com o mesmo conteúdo de imagem. Ancore-o novamente usando a mesma capturar → antigo atualizar → reprojetar - nova viagem ImageViewer.HandleFullscreenChange(System.Boolean) de ida e volta utiliza: snapshot da seleção em coordenadas de pixels naturais contra o redimensionamento PRE as medidas que ainda mantermo, atualize para as medições PÓS-redimensionamento, então projetar de volta. Pulado no meio do arrasto — os condutores de arrasto controlam a geometria de seleção (e capturaram sua própria janela de grampo na partida de arrasto).
Nome: HandleFullscreenChange
Parâmetros: bool isFullscreen
Tipo: Task
Descrição: Callback de mudança em tela completa em nível de documento — JS reporta se o O elemento wrapper é atualmente o elemento em tela cheia do documento. Esculpir Passa por aqui também (não passa pelo botão da barra de ferramentas).
Nome: HandleKeyDown
Parâmetros: string key
bool shiftKey
Tipo: Task
Descrição: Retorno de chamada keydown movido por JS para os atalhos do modo edit. Só fogo para as chaves que reivindicamos (o JS shim filtra por estado chave + modificador), Então não precisamos bloquear esse método em si. Fuga — invocar ImageViewer.OnCancel (se estiver com fio). Enter — commit a seleção como um recorte, se houver um ≥ 5×5; Caso contrário, ImageViewer.OnSave invoque se estiver sujo. + / = / / /_ — dá zoom in / out. 0 — redefinir zoom + panorâmica para identidade. Delete / Backspace — limpar a seleção. Teclas de seta — empurre a seleção 1 px (10 px com Shift).
Nome: HandleWheel
Parâmetros: double deltaY
double cursorRelX
double cursorRelY
Tipo: Task
Descrição: Callback com zoom na roda — JS encaminha cada tick de rolagem (deltaY) mais o O cursor está deslocado do centro do contêiner. A matemática de zoom ancorada segue React: pan_new = (1 − r) · cursorRel + r · pan_prev onde r = zoom_new / zoom_prev. Mantém o cursor sobre o mesmo local-imagem Aponte para o degrau do zoom.
Nome: ResetDirtyAsync
Tipo: Task
Descrição: Marca o visualizador como limpo sem alterar a imagem exibida. Uso após um Salvamento bem-sucedido: Os bytes cortados agora são a versão salva, então futuro As mudanças devem ser medidas com base nesse estado. Para reverter o display imagem para o original ImageViewer.Source E limpar sujo, use o Reset ou atualizar ImageViewer.Source.
Nome: RevertCrop
Tipo: void
Descrição: Remove apenas a sobreposição local de culturas — volta ao original ImageViewer.Source. Rotação e flips ficam onde o usuário tem, Então, se esses mudaram desde o último save, ImageViewer.IsDirty pode Permaneça fiel. Use o botão Reset da barra de ferramentas (ou atualização ImageViewer.Source) para uma reversão completa.