Visualizzazione risultati 1 fino 13 di 13

Discussione: [PHP] Convertire lunghezza di focale

  1. #1
    Guest

    Predefinito [PHP] Convertire lunghezza di focale

    Ho questo codice in WordPress, devo fare in modo che la lunghezza di focale di un obiettivo fotografico venga convertita come fosse quella di un sensore full frame (35 mm).

    Mi spiego meglio: prendiamo una Canon 70D che ha un fattore di conversione di 1.6x, quindi se io faccio una foto con questa macchina mi da una lunghezza di focale a 97mm che convertita nel formato 35mm sarebbe 155,2 mm


    Codice PHP:
    function change_focal_length($content) {
    if (isset(
    $content['focal_length']))
    $content['focal_length'] = '35mm';

    return
    $content;
    }
    add_filter('exifography_display_exif','change_focal_length');
    Lo devo modificare in modo che mi dia automaticamente la conversione. Per adesso uso questo metodo manuale: http://multimedia.fotografia.it/focale/focale.html
    Ultima modifica di albenessereblog : 05-10-2019 alle ore 01.12.21

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Qui possiamo aiutarti nella scrittura del codice, ma dovresti almeno indicare qual'è la funzione di conversione o fornire un link a una pagina che descriva come si effettua la conversione.

    I suggerimenti che do più spesso:


  3. #3
    Guest

    Predefinito

    Questi sono tutti i fattori di conversione, nel tuo esempio ne puoi usare qualcuno, poi il resto li inserisco io.

    In pratica al posto di quel "35mm" va messo un codice che quando estrapola i dati EXIF dalla fotocamera ne effettua la conversione in base al sensore che monta.

    Questo è il plugin: https://wordpress.org/plugins/thesography/

    Codice HTML:
    FATTORI DI CONVERSIONE
    Largo formato
    4x5”= 0.27x
    5x7”= 0.20x
    8x10”= 0.13x
    11x14”= 0.10x
    
    Medio formato 
    645D = 0.79x
    645 = 0.62x
    6x6 = 0.55x
    6x7 = 0.47x
    6x9 = 0.43x
    6x12 = 0.35x
    
    DSLRs / mirrorless
    Full frame 35mm = 1x
    APS-H  (Canon) = 1.26x
    DX (Nikon) = 1.52x
    APS-C  general (Nikon-Sony-Pentax) = 1.52x
    APS-C  (Canon) = 1.62x
    APS-C  (Sigma) = 1.7x
    4/3” = 2x
    CX (Nikon) = 2.7x
    
    Camere compatte
    1.5” = 1.85x
    1” = 2.71x 
    2/3” = 3.93x
    1/1.6” = 4.41x
    1/1.7” = 4.55x
    1/1.8” = 4.8x
    1/2 = 5.41x
    1/2.3” = 5.58x 
    1/2.4” = 5.74x
    1/2.5” = 5.97x
    1/2.7” = 6.41x
    1/3” = 7.21x
    1/3.2” = 7.62x
    1/3.6” = 8.65x
    1/4” = 9.61x
    1/6” = 16x
    Ultima modifica di albenessereblog : 05-10-2019 alle ore 13.13.57

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Probabilmente puoi usare una catena di condizioni per ottenere i fattori di conversione, quindi moltiplicare la lunghezza focale per il fattore.
    Codice PHP:
    function convert($focal_length, $model) {
    $factor = 1.0;

    if (
    $model == "4x5''") {
    $factor = 0.27;
    }
    elseif (
    $model == "5x7''") {
    $factor = 0.20;
    }
    ...
    elseif (
    $model == "1/6''") {
    $factor = 16;
    }

    return (
    floatval($focal_length) * $factor) . "mm";
    }

    // Example
    echo convert("97mm", "APS-C (Canon)"); // Shows: "157.14mm"

    I suggerimenti che do più spesso:


  5. #5
    Guest

    Predefinito

    Ho provato il codice, ma non succede niente, mette a video ancora 97mm. Ho dovuto togliere i 3 puntini altrimenti non apriva la pagina.
    Poi non ho capito quel echo in fondo.

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    I tre puntini stavano a indicare che occorreva replicare la catena di elseif... per ogni valore nella tabella di conversione .

    Poi non ho capito quel echo in fondo.
    Come indicato dal commento si tratta di un esempio. Una volta inseriti per bene tutti i casi all'interno della funzione, chiamando convert con quei parametri e stampandone il risultato otterrai in output "157.14mm".

    I suggerimenti che do più spesso:


  7. #7
    Guest

    Predefinito

    Scusa ma non riesco ancora a capire: mi puoi potare il codice funzionante con quell'echo?

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Codice PHP:
    <?php
    function convert($focal_length, $model) {
    $factor = 1.0;

    if (
    $model == "4x5''") {
    $factor = 0.27;
    }
    elseif (
    $model == "5x7''") {
    $factor = 0.20;
    }

    elseif (
    $model == "8x10''") {
    $factor = 0.13;
    }

    elseif (
    $model == "11x14''") {
    $factor= 0.10;
    }

    elseif (
    $model == "645D") {
    $factor = 0.79;
    }

    elseif (
    $model == "645") {
    $factor = 0.62;
    }

    elseif (
    $model == "6x6") {
    $factor = 0.55;
    }

    elseif (
    $model == "6x7") {
    $factor = 0.47;
    }

    elseif (
    $model == "6x9") {
    $factor = 0.43;
    }

    elseif (
    $model == "6x12") {
    $factor = 0.35;
    }

    elseif (
    $model == "Full frame 35mm") {
    $factor = 1;
    }

    elseif (
    $model == "APS-H (Canon)") {
    $factor = 1.26;
    }

    elseif (
    $model == "DX (Nikon)") {
    $factor = 1.52;
    }

    elseif (
    $model == "APS-C general (Nikon-Sony-Pentax)") {
    $factor = 1.52;
    }

    elseif (
    $model == "APS-C (Canon)") {
    $factor = 1.62;
    }

    elseif (
    $model == "APS-C (Sigma)") {
    $factor = 1.7;
    }

    elseif (
    $model == "4/3''") {
    $factor = 2;
    }

    elseif (
    $model == "CX (Nikon)") {
    $factor = 2.7;
    }

    elseif (
    $model == "1.5''") {
    $factor = 1.85;
    }

    elseif (
    $model == "1''") {
    $factor = 2.71;
    }

    elseif (
    $model == "2/3''") {
    $factor = 3.93;
    }

    elseif (
    $model == "1/1.6''") {
    $factor = 4.41;
    }

    elseif (
    $model == "1/1.7''") {
    $factor = 4.55;
    }

    elseif (
    $model == "1/1.8''") {
    $factor = 4.8;
    }

    elseif (
    $model == "1/2''") {
    $factor = 5.41;
    }

    elseif (
    $model == "1/2.3''") {
    $factor = 5.58;
    }

    elseif (
    $model == "1/2.4''") {
    $factor = 5.74;
    }

    elseif (
    $model == "1/2.5''") {
    $factor = 5.97;
    }

    elseif (
    $model == "1/2.7''") {
    $factor = 6.41;
    }

    elseif (
    $model == "1/3''") {
    $factor = 7.21;
    }

    elseif (
    $model == "1/3.2''") {
    $factor = 7.62;
    }

    elseif (
    $model == "1/3.6''") {
    $factor = 8.65;
    }

    elseif (
    $model == "1/4''") {
    $factor = 9.61;
    }

    elseif (
    $model == "1/6''") {
    $factor = 16;
    }

    return (
    floatval($focal_length) * $factor) . "mm";
    }

    // Example
    echo convert("97mm", "APS-C (Canon)"); // Shows: "157.14mm"

    I suggerimenti che do più spesso:


  9. #9
    Guest

    Predefinito

    Va meglio, sembra funzionare se lascio l'echo sotto // Example eppoi me lo stampa in alto a sinistra del monitor, ma questo forse è css.
    Quindi, se tolgo l'echo non stampa più nulla.

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Esatto, ora ha la funzione, come usarla dipende da tutto il contesto che ci hai costruito attorno.
    Riprendendo il primo messaggio sembra che tu stia usando un qualche sistema di filtri/pipeline, probabilmente in un contesto di CMS o plugin. Per sapere come integrare la funzione in questo meccanismo dovresti consultare la documentazione del plugin o CMS in questione.

    I suggerimenti che do più spesso:


  11. #11
    Guest

    Predefinito

    Non ho ancora capito bene, devo lasciarlo l'echo o lo tolgo? Il tuo codice funziona, devo capire dove posizionarlo.

    EDIT

    Il primo codice che dici tu, me l'ha dato il creatore del plugin per fare la mia modifica, Questo codice va a sovrascrivere l'originale, che è questo sotto, quindi nel codice che mi hai dato tu bisogna mettere i codici corretti:

    Codice PHP:
    ...
    elseif (
    $key == 'focal_length' && !$imgmeta['image_meta'][$key] == 0)
    $exif = $imgmeta['image_meta'][$key] . __('mm','exifography');
    ...
    Ultima modifica di albenessereblog : 09-10-2019 alle ore 18.18.14

  12. #12
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    L'echo va tolto, non fa parte della funzione di conversione ma era solo un esempio.

    Riguardo all'integrazione: senza conoscere il sistema alla base è difficile dare indicazioni precise. C'è una qualche forma di documentazione su come ottenere i dati EXIF riguardo a lunghezza focale e modello, e su come integrare un filtro personalizzato per convertire la lunghezza focale nel sistema?

    I suggerimenti che do più spesso:


  13. #13
    Guest

    Predefinito

    Il creatore del plugin mi ha detto questo:

    "Technically you can change the code to say whatever you want. I have a tutorial here about how to filter the output:

    https://kristarella.blog/2012/07/fil...graphy-output/

    To hard-code the focal length you would use something like this in your theme’s functions.php or a plugin like Code Snippets:"

    Codice PHP:
    function change_focal_length($content) {
    if (isset(
    $content['focal_length']))
    $content['focal_length'] = '35mm';

    return
    $content;
    }
    add_filter('exifography_display_exif','change_focal_length');

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •