質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1354閲覧

画像アップロード resizeした時に gifが動かない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/01/10 07:59

編集2019/01/10 08:07

画像upload機能を作成しています。
upload自体はできたのですが、thumbnailに使用したいためresize機能を作成しています。
そこで、resizeはできるものの、gifをrisizeしたのち表示させると、gifが動かなくなります。

調べていますが、これといったものができません。どのようにしたら良いでしょうか。
下記がコードになります。

php

1//imgUpload1.php 2 3ini_set("display_errors", 1); 4error_reporting(E_ALL); 5 6require_once('imgUpload2.php'); 7 8$tmpfile = $_FILES['image']['tmp_name']; 9$filename = $_FILES['image']['name']; 10 11if(is_uploaded_file($tmpfile)){ 12 $uploader = uploader($tmpfile,$filename); 13 $file = '../img/thumbnail/' .$uploader; 14}else{ 15 16} 17?> 18 19<!DOCTYPE html> 20<html> 21<head> 22 <title>ImageUpload and Resize</title> 23</head> 24<body> 25 <h1>Image upload and resize screen</h1> 26 27 <form action="imgUpload1.php" method="post" enctype="multipart/form-data"> 28 <input id="file" type="file" name="image"> 29 <input id="btn" type="submit" value="アップロード"> 30 </form> 31 <img src="<?= $file?>"> 32</body> 33</html>

php

1//imgUpload2.php 2 3<?php 4ini_set("display_errors", 1); 5error_reporting(E_ALL); 6 7function uploader($tmpfile,$filename) 8{ 9 $sepExt = pathinfo($filename); 10 $getExt = $sepExt['extension']; 11 $baseName = date("Hms"); 12 $newFileName = $baseName ."." .$getExt; 13 $dir = '../img/thumbnail/'; 14 15 @rename($filename,$newFileName); 16 17 if(move_uploaded_file($tmpfile, $dir .$newFileName)){ 18 $resized = resize_image($dir,$getExt,$newFileName,150,150); 19 20 if($resized != false){ 21 return $newFileName = $baseName ."." .$getExt; 22 }else{ 23 $err = "エラー"; 24 return $err; 25 } 26 27 }else{ 28 $err = "エラー"; 29 return $err; 30 } 31 32 return false; 33} 34 35function resize_image($dir,$extend,$filename,$newW,$newH) 36{ 37 list($oldW,$oldH) = getimagesize($dir .$filename); 38 39 switch ($extend) { 40 case 'jpg': 41 $old_resource = imagecreatefromjpeg($dir .$filename); 42 break; 43 44 case 'png': 45 $old_resource = imagecreatefrompng($dir .$filename); 46 break; 47 48 case 'gif': 49 $old_resource = imagecreatefromgif($dir .$filename); 50 break; 51 } 52 53 $new_resource = imagecreatetruecolor($newW, $newH); 54 imagecopyresampled($new_resource, $old_resource, 0, 0, 0, 0, $newW, $newH, $oldW, $oldH); 55 56 switch ($extend) { 57 case 'jpg': 58 imagejpeg($new_resource,$dir .$filename); 59 return "jpg"; 60 break; 61 62 case 'png': 63 imagepng($new_resource,$dir .$filename); 64 return "png"; 65 break; 66 67 case 'gif': 68 imagegif($new_resource,$dir .$filename); 69 return "gif"; 70 break; 71 } 72 73 return false; 74} 75

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

残念ながら、imagecreatefromgifは、アニメーションGIFに対応していません

警告 GIF ファイルをメモリに取り込む際、最初のフレームだけが 画像リソースポインタで返されます。(PHPマニュアルより)

ImageMagickを使って処理する必要があります(参考)。

投稿2019/01/10 08:16

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/10 08:28

なるほど、ありがとうございます。 gifは、フレームが数枚あるものから作られているので その一つ一つのフレームをリサイズする必要があるということですね。。。 ご提供していただいたURLをみて、少しいじってみます。 ありがとうございます。
guest

0

Resize animated GIF file without destroying animation
のベストの人はImageMagickをsystemから使ってますし、"imagecopyresampled"でページ内検索するとGIFDecoder/GIFEncoderを使ってがんばってるコードサンプルもあります。

投稿2019/01/10 08:25

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

良くは見ていませんが、少なくとも、
imagejpegimagegifじゃないでしょうか?
同様に、pngはimagepng

投稿2019/01/10 08:11

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/10 08:13

先ほど気がつき、修正しましたが、やはりgifが動きませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問