Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obrazek z input dynamicznie się pojawia
Forum PHP.pl > Forum > Po stronie przeglądarki
Ciubas
witam,

mam pytanie mam taki formularz:

  1. ..
  2. <p><label for="picture">Picture</label><input type="file" name="picture" /></p>
  3. <p><input type="submit" value="Create" /></p>
  4. ..


Czy da się zrobić tak aby obrazek od razu się pojawiał? Czyli wczytywał dynamicznie z dysku po przez js a nie przeładowanie strony?

Potrzebuję odczytać z obrazka klika rzeczy które wprowadzam na resztę formularza i to znacznie ułatwiło by mi zadanie.
Ciubas
Mi nie zależy aby to wrzucał na serwer w sumie, tylko lokalnie czytał z dysku - czyli aby ścieżka do pliku z pola <input> dynamicznie została wczytana gdzieś obok do <img src=""/> - macie jakiś pomysł?
kamil4u
Ze względów bezpieczeństwa nie jest to raczej możliwe smile.gif
Rid
Cytat
Ze względów bezpieczeństwa nie jest to raczej możliwe

Przecież ,banery reklamowe zmieniają obrazy co jakiś czas,więc dynamiczne wczytywanie obrazów, chyba jest możliwe.
Ciubas
Jakiego bezpieczeństwa? Skoro mogę wczytać obrazek:

<img src="C:/dysk/obrazek.jpg"/> to musi się dać zmienić to przez js na obrazek3.jpg

No chyba, że ja nie rozumiem czym jest bezpieczeństwo...
mortus
Znalezione kiedyś w sieci:
  1. <head>
  2. <script type="text/javascript">
  3. <!--
  4. // Begin
  5. /* This script and many more are available free online at
  6. The JavaScript Source!! <a href="http://javascript.internet.com" target="_blank">http://javascript.internet.com</a>
  7. Created by: Abraham Joffe :: <a href="http://www.abrahamjoffe.com.au/" target="_blank">http://www.abrahamjoffe.com.au/</a> */
  8. /***** CUSTOMIZE THESE VARIABLES *****/
  9. // width to resize large images to
  10. var maxWidth = 500;
  11. // height to resize large images to
  12. var maxHeight = 500;
  13. // valid file types
  14. var fileTypes = ["bmp", "gif", "png", "jpg", "jpeg"];
  15. // the id of the <strong class="highlight">preview</strong> <strong class="highlight">image</strong> tag
  16. var outImage = "previewField";
  17. // what to display when the <strong class="highlight">image</strong> is not valid
  18. var defaultPic = "spacer.gif";
  19. /***** DO NOT EDIT BELOW *****/
  20. function preview(what){
  21. var source = what.value;
  22. var ext = source.substring(source.lastIndexOf(".") + 1, source.length).toLowerCase();
  23. for (var i = 0; i < fileTypes.length; i++) {
  24. if (fileTypes[i] == ext) {
  25. break;
  26. }
  27. }
  28. globalPic = new Image();
  29. if (i < fileTypes.length) {
  30.  
  31. //Obtenemos los datos de la imagen de firefox
  32. try {
  33. globalPic.src = what.files[0].getAsDataURL();
  34. }
  35. catch (err) {
  36. globalPic.src = source;
  37. }
  38. }
  39. else {
  40. globalPic.src = defaultPic;
  41. alert("ESTA NO ES UNA IMAGEN VALIDA por favor escoge una imagen de tipo:nn" + fileTypes.join(", "));
  42. }
  43. setTimeout("applyChanges()", 200);
  44. }
  45.  
  46. var globalPic;
  47. function applyChanges(){
  48. var field = document.getElementById(outImage);
  49. var x = parseInt(globalPic.width);
  50. var y = parseInt(globalPic.height);
  51. if (x > maxWidth) {
  52. y *= maxWidth / x;
  53. x = maxWidth;
  54. }
  55. if (y > maxHeight) {
  56. x *= maxHeight / y;
  57. y = maxHeight;
  58. }
  59. field.style.display = (x < 1 || y < 1) ? "none" : "";
  60. field.src = globalPic.src;
  61. field.width = x;
  62. field.height = y;
  63. }
  64.  
  65. // End -->
  66. </script>
  67. </head>
  68. <body>
  69. <p>Pre-veiw pic from your drive</p>
  70. <input type="file" id="picField" onchange="preview(this)">
  71. <img alt="Graphic will preview here" id="previewField" src="http://i14.photobucket.com/ssalbums/a345/Instar/eye_search_e0.gif">
  72. </body>
  73. </html>
Ciubas
Na FF działa, na operze nie - ale to jest to o co mi chodziło - bardzo dziękuje za pomoc!

Teraz tylko to zmodyfikować pod siebie i czary będą realne biggrin.gif
kamil4u
Zrobiłem najprostszy test:
Kod
<input type="file" onchange="alert(this.value)">


Kod ten wyświetla jedynie "część" ścieżki do pliki(FF - może starsze przeglądarki pokażą pełną ścieżkę), a dokładnie tylko jego nazwę - skoro tak jest to pewnie jest to związane z bezpieczeństwem( żeby nie było wiadomo, gdzie użytkownik trzyma pliki - moje domysły) stąd mój post.

Kod ~mortusa działa trochę inaczej(i tylko dla FF). Sam zobacz, że nie wyświetlana jest pełna ścieżka, a sam plik:
Kod
<input type="file" onchange="alert(this.files[0].getAsDataURL() );>


Stwierdziłem zatem, że skoro nie da się tego zrobić dla wszystkich przeglądarek to nie da się tego zrobić - zastosuj ajax + upload pliku(chyba nie musisz zapisywać obrazka na serwerze( w PHP dawno się nie bawiłem) - http://forum.webhelp.pl/php-i-bazy-danych/...on-t199853.html )

@Rid: Ty mówisz po prostu o
Kod
new Image
- moim zdaniem o czymś innym
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.