Différences
Ci-dessous, les différences entre deux révisions de la page.
| codes_sources_en_vrac:dev_web:recadrer_photo [2024/01/25 10:09] – créée norore | codes_sources_en_vrac:dev_web:recadrer_photo [2026/02/11 12:44] (Version actuelle) – supprimée norore | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== Uploader une photo recadrée à la volée ====== | ||
| - | ===== Requis ===== | ||
| - | |||
| - | * [[https:// | ||
| - | * PHP | ||
| - | * HTML | ||
| - | * CSS | ||
| - | |||
| - | ===== Qu' | ||
| - | |||
| - | Jouer avec base64. | ||
| - | |||
| - | ===== Code source ===== | ||
| - | |||
| - | ==== Javascript ==== | ||
| - | |||
| - | <code javascript> | ||
| - | $uploadCrop = $('# | ||
| - | enableExif: true, | ||
| - | viewport: { | ||
| - | width: 300, | ||
| - | height: 400 | ||
| - | }, | ||
| - | boundary: { | ||
| - | width: 400, | ||
| - | height: 400 | ||
| - | } | ||
| - | }); | ||
| - | |||
| - | $('# | ||
| - | var input = $(this)[0]; | ||
| - | if (input.files && input.files[0]) { | ||
| - | var reader = new FileReader(); | ||
| - | | ||
| - | reader.onload = function (e) { | ||
| - | $uploadCrop.croppie(' | ||
| - | url: e.target.result | ||
| - | }).then(function(){ | ||
| - | console.log(' | ||
| - | }); | ||
| - | } | ||
| - | reader.readAsDataURL(input.files[0]); | ||
| - | } | ||
| - | else { | ||
| - | alert(" | ||
| - | } | ||
| - | }); | ||
| - | |||
| - | $('# | ||
| - | var input = $(this)[0]; | ||
| - | if (input.files && input.files[0]) { | ||
| - | var reader = new FileReader(); | ||
| - | | ||
| - | reader.onload = function (e) { | ||
| - | $uploadCrop.croppie(' | ||
| - | url: e.target.result | ||
| - | }).then(function(){ | ||
| - | console.log(' | ||
| - | }); | ||
| - | } | ||
| - | reader.readAsDataURL(input.files[0]); | ||
| - | } | ||
| - | else { | ||
| - | alert(" | ||
| - | } | ||
| - | }); | ||
| - | |||
| - | function showResult(result) { | ||
| - | if (result.src) { | ||
| - | var img = result.src; | ||
| - | $('# | ||
| - | } | ||
| - | if (result.blob) { | ||
| - | var img = result.blob; | ||
| - | $('# | ||
| - | } | ||
| - | } | ||
| - | |||
| - | $('# | ||
| - | $uploadCrop.croppie(' | ||
| - | type: ' | ||
| - | size: ' | ||
| - | }).then(function (value) { | ||
| - | showResult({src: | ||
| - | }); | ||
| - | }); | ||
| - | |||
| - | $('# | ||
| - | $uploadCrop.croppie(' | ||
| - | type: ' | ||
| - | size: ' | ||
| - | }).then(function (value) { | ||
| - | showResult({blob: | ||
| - | }); | ||
| - | }); | ||
| - | </ | ||
| - | |||
| - | ==== Rendu HTML ==== | ||
| - | |||
| - | <code html> | ||
| - | {{ form_start(form_etudiant, | ||
| - | {{ form_errors(form_etudiant) }} | ||
| - | <div align=" | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | <img id=" | ||
| - | < | ||
| - | </ | ||
| - | {{ form_widget(form_etudiant.photo) }} | ||
| - | <div class=" | ||
| - | <div id=" | ||
| - | <p align=" | ||
| - | <img id=" | ||
| - | </ | ||
| - | < | ||
| - | <input type=" | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <div class=" | ||
| - | </ | ||
| - | |||
| - | <div align=" | ||
| - | <input id=" | ||
| - | | ||
| - | <a class=" | ||
| - | ' | ||
| - | { | ||
| - | ' | ||
| - | ' | ||
| - | } | ||
| - | ) }}" title=" | ||
| - | {{ ' | ||
| - | </a> | ||
| - | {{ form_end(form_etudiant) }} | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Avant le </ | ||
| - | |||
| - | <code html> | ||
| - | <script type=" | ||
| - | </ | ||
| - | ==== PHP ==== | ||
| - | |||
| - | === Formulaire === | ||
| - | |||
| - | <code php> | ||
| - | <?php | ||
| - | |||
| - | namespace Scolarite\BiologieBundle\Form; | ||
| - | |||
| - | use Symfony\Component\OptionsResolver\OptionsResolver; | ||
| - | |||
| - | use Symfony\Component\Form\AbstractType; | ||
| - | use Symfony\Component\Form\FormBuilderInterface; | ||
| - | |||
| - | use Symfony\Component\Form\Extension\Core\Type\FileType; | ||
| - | |||
| - | class PhotoEtudiantType extends AbstractType | ||
| - | { | ||
| - | /** | ||
| - | * {@inheritdoc} | ||
| - | */ | ||
| - | public function buildForm(FormBuilderInterface $builder, array $options) | ||
| - | { | ||
| - | $builder-> | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ) | ||
| - | )); | ||
| - | } | ||
| - | |||
| - | /** | ||
| - | * {@inheritdoc} | ||
| - | */ | ||
| - | public function configureOptions(OptionsResolver $resolver) | ||
| - | { | ||
| - | $resolver-> | ||
| - | ' | ||
| - | )); | ||
| - | } | ||
| - | |||
| - | /** | ||
| - | * {@inheritdoc} | ||
| - | */ | ||
| - | public function getBlockPrefix() | ||
| - | { | ||
| - | return ' | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | === Controller === | ||
| - | |||
| - | <code php> | ||
| - | if ($request-> | ||
| - | $file = $individu-> | ||
| - | $base64 = $request-> | ||
| - | list($type, | ||
| - | list(, $data) | ||
| - | $data = base64_decode($data); | ||
| - | |||
| - | if (!preg_match('/ | ||
| - | $request-> | ||
| - | } | ||
| - | if (!preg_match('/ | ||
| - | $request-> | ||
| - | } | ||
| - | if (!preg_match('/ | ||
| - | $request-> | ||
| - | } | ||
| - | else { | ||
| - | try { | ||
| - | $fileName = md5(uniqid()) . ' | ||
| - | file_put_contents($this-> | ||
| - | $individu-> | ||
| - | |||
| - | $em = $this-> | ||
| - | $em-> | ||
| - | $em-> | ||
| - | |||
| - | $request-> | ||
| - | |||
| - | return $this-> | ||
| - | ' | ||
| - | array( | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | ' | ||
| - | )); | ||
| - | } catch (Exception $e) { | ||
| - | $msg | ||
| - | $msg .= "< | ||
| - | $msg .= "Si l' | ||
| - | |||
| - | $request-> | ||
| - | $request-> | ||
| - | } | ||
| - | } | ||
| - | } | ||
| - | </ | ||