Crei un layout per confrontare immagini prima e dopo
Crei un layout preciso per confrontare immagini prima e dopo senza stimare le coordinate nel codice dell’interfaccia.
Esegui gratis nel browser
Indichi le dimensioni in pixel di entrambe le immagini, scelga una presentazione affiancata o una sovrapposizione con cursore e riceva canvas, rettangoli, aree di ritaglio e posizione del divisore verticale come dati strutturati. Sono previste dimensioni uguali, perché un confronto visivo attendibile richiede contenuti allineati. Se le immagini sorgente differiscono, Lei può richiedere esplicitamente un’istruzione che ridimensioni l’immagine successiva in base a quella precedente.
Scelga il formato di confronto adatto al racconto
Una presentazione prima-dopo può soddisfare due diverse esigenze di visualizzazione. Un layout di confronto con immagini affiancate mantiene ogni immagine interamente visibile, soluzione utile quando il pubblico deve esaminare tutta la scena, confrontare aree lontane o consultare il risultato senza interagire. Il canvas restituito ha una larghezza doppia rispetto a quella effettiva dell’immagine: il pannello precedente è a sinistra, quello successivo a destra e un divisore verticale occupa il confine comune. La sovrapposizione con cursore dispone invece entrambe le immagini nello stesso sistema di coordinate. I rettangoli di ritaglio complementari mostrano l’immagine precedente a sinistra del divisore e quella successiva a destra. Le piccole modifiche risultano così più facili da individuare, perché gli elementi corrispondenti restano nello stesso punto durante lo spostamento del divisore. Scelga la modalità in base al pubblico e all’interfaccia, quindi utilizzi direttamente i rettangoli in CSS, SVG, Canvas o in un livello di rendering nativo. Le coordinate sono pixel interi, senza convenzioni nascoste da ricostruire in seguito.
Gestisca esplicitamente le differenze di dimensione
I confronti attendibili iniziano con dimensioni uguali. Se un’immagine misura 1200 per 800 pixel e l’altra 1000 per 800, sovrapporle senza dichiarare una trasformazione sposta i dettagli corrispondenti e può amplificare o nascondere una modifica. Per questo la calcolatrice rifiuta larghezze o altezze diverse, salvo quando `resize_to_match` è attivo. Con tale opzione, l’immagine precedente diventa la destinazione canonica e il risultato include le dimensioni di destinazione dell’immagine successiva insieme a fattori indipendenti di scala orizzontale e verticale. Questa regola indica con precisione al renderer quale adattamento è previsto e consente di rilevare una deformazione non uniforme. Lo strumento non esegue il ridimensionamento né sceglie il ritaglio. Se è importante conservare le proporzioni, prepari sorgenti corrispondenti o applichi un ritaglio in una pipeline per immagini prima di richiedere il layout. Quando le dimensioni coincidono già, l’oggetto di ridimensionamento segnala soltanto che non serve alcun intervento. La struttura rimane così prevedibile e priva di campi facoltativi nulli.
Trasformi l’output del divisore in un’interfaccia operativa
Per la sovrapposizione, indichi una percentuale del divisore compresa fra zero e cento. La calcolatrice la converte nel pixel più vicino sul canvas e restituisce due ritagli le cui larghezze sommano sempre la larghezza totale. A zero per cento il ritaglio precedente ha larghezza nulla e l’immagine successiva è completamente visibile; a cento per cento avviene il contrario. Viene restituita anche la percentuale invariata, utile per lo stato dell’interfaccia, i valori di accessibilità, le analisi o un ricalcolo dopo un ridimensionamento responsivo. Nella modalità affiancata, due pannelli a larghezza piena collocano naturalmente il divisore al centro del canvas combinato, indipendentemente dalla percentuale inserita. Utilizzi l’orientamento e la coordinata x per posizionare una linea, una maniglia o un controllo azionabile da tastiera. Un cursore pronto per la produzione deve comunicare il valore alle tecnologie assistive, accettare i tasti freccia e identificare entrambi i lati. Poiché questa capacità restituisce geometria anziché markup, lo stesso risultato deterministico può alimentare un componente web, una grafica social, un’anteprima del design system o un’applicazione mobile.
Casi d'uso
Documentare una ristrutturazione
Disponga fotografie allineate di un ambiente in pannelli completi adiacenti o in un cursore interattivo.
Presentare una modifica fotografica
Generi ritagli esatti per anteprime di ritocco, restauro, correzione del colore o rimozione dello sfondo.
Uniformare i componenti di confronto
Fornisca ai renderer web e mobili lo stesso canvas, gli stessi rettangoli, il piano di adattamento e il divisore.
Domande frequenti
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. Lo strumento presente in questa pagina è gratuito nel browser.
Lo strumento modifica o carica le mie immagini?
No. Riceve soltanto le dimensioni e restituisce coordinate; non legge, trasferisce, archivia né renderizza i byte delle immagini.
Che cosa accade se le dimensioni sono diverse?
La richiesta restituisce un errore di input non valido, salvo quando resize_to_match è vero. Se attivato, il risultato descrive come adattare l’immagine successiva alle dimensioni della precedente.
Come viene calcolato il pixel del divisore?
La larghezza viene moltiplicata per la percentuale richiesta, divisa per 100 e arrotondata al pixel intero più vicino.
La percentuale influisce sulla modalità affiancata?
No. Questa modalità mostra due pannelli completi di uguali dimensioni, quindi il divisore resta sempre al 50 per cento del canvas combinato.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/image/compare-before-after-layout \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}'const res = await fetch("https://api.kit.forhosting.com/image/compare-before-after-layout", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/compare-before-after-layout",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/compare-before-after-layout", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"before_width":1200,"before_height":800,"after_width":1200,"after_height":800}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/compare-before-after-layout", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"before_width": 1200,
"before_height": 800,
"after_width": 1200,
"after_height": 800
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.compare_before_after_layout",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_mb | 15 |
max_megapixels | 12 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |