[PHP] Convertire lunghezza di focale

Shyson

Utente Attivo
19 Ago 2012
1.145
1
38
Ho questo codice in WordPress, lo devo modificare in modo che mi dia automaticamente la conversione, 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:
function change_focal_length($content) {
    if (isset($content['focal_length']))
        $content['focal_length'] = '35mm';

    return $content;
}
add_filter('exifography_display_exif','change_focal_length');
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:
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
 

macus_adi

Utente Attivo
5 Dic 2017
1.266
82
48
IT/SW
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.
Forse ti sei dimenticato di citare il contenuto di "content", ok è tipo array, ma quali sono gli elementi su cui lavorare?
un buffer, una stringa, array multidimensionali ibridi....
PHP:
$content['focal_length']
cosa contiene?
 

Shyson

Utente Attivo
19 Ago 2012
1.145
1
38
Quel codice in php me l'ha dato l'autore, mi ha detto che va modificato, ma non mi ha detto come.

Questo invece, è la parte originale che c'è nel file del plugin, in pratica estrapola i dati EXIF dalla camera e li mette a video

Codice:
...
elseif ($key == 'focal_length' && !$imgmeta['image_meta'][$key] == 0)
                        $exif = $imgmeta['image_meta'][$key] . __('mm','exifography');
...
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.246
324
83
@Shyson
Quando posti codice PHP devi usare il tag:
PHP 2.png
non il tag:
Code2.png

Grazie
 

Shyson

Utente Attivo
19 Ago 2012
1.145
1
38
Intendi dire cosa stampa?

Questo viene stampato dal codice originale, come vedi la Lunghezza focale originale è 97mm per il sensore ridotto che monta questa macchina. In realtà però se questo obiettivo fosse montato su una Full frame 35mm l'obbiettivo equivalente sarebbe 157,14 (97x1.62 che è il fattore di conversione).

Quello che intendo fare è modificare il codice in modo che mi stampa la Lunghezza di focale come fosse montata su una Full frame (157.14mm).
Schermata 2019-10-06 alle 20.46.46.png
 

macus_adi

Utente Attivo
5 Dic 2017
1.266
82
48
IT/SW
PHP:
function change_focal_length($content) {
   
print_r($content);die;
//o in alternativa
//dd($content);
if (isset($content['focal_length']))
       $content['focal_length'] = '35mm';

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

Shyson

Utente Attivo
19 Ago 2012
1.145
1
38
Questo:

PHP:
Array ( [created_timestamp] =>
Data: 22 Agosto 2016, 07:40
[camera] =>
Camera: Canon EOS 70D
[focal_length] =>
Lunghezza focale (35mm): 97mm
[aperture] =>
Apertura: ƒ/4
[shutter_speed] =>
Velocità otturatore: 1/500s
[iso] =>
ISO: 200
[flash] =>
Flash attivato: no
)
 

macus_adi

Utente Attivo
5 Dic 2017
1.266
82
48
IT/SW
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
Non trovo da nessuna parte la mappatura che hai postato...
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
Come fai a convertire focal_length se manca/non trovo la base del calcolo... Al massimo una proporzione?
Posta qualche risultato di una fotocamera che non abbia focal 35mm....
 

Shyson

Utente Attivo
19 Ago 2012
1.145
1
38
Il codice che ha stampato print è simile a questo che si trova in un altro file del plugin:
PHP:
    $this->fields = array(
                'aperture' => __('Aperture', 'exifography'),
                'credit' => __('Credit', 'exifography'),
                'camera' => __('Camera', 'exifography'),
                'caption' => __('Caption', 'exifography'),
                'created_timestamp' => __('Taken', 'exifography'),
                'copyright' => __('Copyright', 'exifography'),
                'exposure_bias' => __('Exposure bias', 'exifography'),
                'flash' => __('Flash fired', 'exifography'),
                'focal_length' => __('Focal length', 'exifography'),
                'iso' => __('ISO', 'exifography'),
                //'lens' => __('Lens', 'exifography'),
                'keywords' => __('Keywords', 'exifography'),
                'location' => __('Location', 'exifography'),
                'shutter_speed' => __('Shutter speed', 'exifography'),
                'title' => __('Title', 'exifography'),
            );
Questa foto è fatta con una full frame e l'obiettivo mostrato è 16mm reale
Questo è il fattore di conversione per una full frame: 1x
Schermata 2019-10-07 alle 10.06.35.png
 
Ultima modifica:

Shyson

Utente Attivo
19 Ago 2012
1.145
1
38
Ho trovato una cosa del genere, ma non converte la focale

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"