<style> .current{ font-weight: bold; } </style> <?php $limit = 10; $page = empty($_GET["page"])? 1:$_GET["page"]; $disp=3; $next = $page+1; $prev = $page-1; $start = ($page-floor($disp / 2) > 0) ? ($page-floor($disp/2)) : 1; $end = ($start > 1) ? ($page+floor($disp/2)) : $disp; //55 $start = ($limit < $end) ? $start-($end-$limit):$start; if($page != 1 ) { print '<a href="?page='.$prev.'">« 前へ</a>'; } if(($page - $disp) > 0 | $page == $disp){ if($start >= floor($disp/2)){ print '<a href="?page=1">1</a>'; if($start > floor($disp/2) and $page != $disp){ print "..."; } if($page == $disp){ print " "; } } } for($i=$start; $i <= $end ; $i++){ $class = ($page == $i) ? ' class="current"':""; if($i <= $limit && $i > 0 ) print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a> '; } if($limit > $end){ if($limit - 1 > $end) print "..."; print '<a href="?page='.$limit.'">'.$limit.'</a>'; } if($page < $limit){ print '<a href="?page='.$next.'">次へ »</a>'; } ?>
次へ前へのページング
<?php $page = empty($_GET["page"])? 1:$_GET["page"]; function paging($page,$disp=5){ $limit = 10; $page = empty($_GET["page"])? 1: $_GET["page"]; $next = $page+1; $prev = $page-1; if($page != 1){ echo '<a href="?page='.$prev.'">« 前へ</a>'; } if($page < $limit){ echo ' <a href="?page='.$next.'">次へ »</a>'; } // print "current:".$page."<br>"; // print "next:".$next."<br>"; // print "prev:".$prev."<br>"; } echo paging(); ?>
GETパラメーターで複数ページを表示
例えば、60個のデータを1ページ20個まで表示すると考えた場合、
$_GET[“param”]で、パラメーターの値を取得して、条件分岐で表示できる。
<?php $data = 60; $per_show = 20; $page_count = (int)(($data -1) / $per_show) +1; // echo $page_count; echo $page_count . "ページまであります。<br>"; $param = (int)$_GET["page"]; if($param){ if($page_count >= $param){ echo $param . "ページ目です。"; } } ?>
なるほど、こういうことか。
ページングを足してみます。
<?php $data = 70; $per_show = 20; $page_count = (int)(($data -1) / $per_show) +1; // echo $page_count; echo $page_count . "ページまであります。<br>"; $param = (int)$_GET["page"]; if($param){ if($page_count >= $param){ echo $param . "ページ目です。<br>"; } } echo "<br>"; for($i=0; $i< $page_count; $i++){ $page = $i + 1; echo "<a href=\"?page=".$page."\">".$page."</a> "; } ?>
うひょー
拡張子がgifでもIMAGETYPE_PNG
$image = @imagecreatefromgif(hoge.gif); imagejpeg($image, 'hoge.jpg');
上記のようにexif_imagetypeのswitchで判定してjpegをつくろうとしていたのですが、全く動かなかったので、テストに使ったgif拡張子を判定すると
<?php switch(exif_imagetype('hoge.gif')){ case IMAGETYPE_JPEG : echo "def"; break; case IMAGETYPE_GIF : echo "gif"; break; case IMAGETYPE_PNG : echo "png"; break; } ?>
勘弁してよ、3時間ぐらい迷走していました。もうやだ。
画像ファイルのアップロード
<?php $dir = "upload"; if (!$handle=opendir($dir)) die("ディレクトリの読み込みに失敗しました"); while($filename=readdir($handle)) { if(!preg_match("/^\./", $filename)) { if (!unlink("$dir/$filename")) die("ファイルの削除に失敗しました"); } } if (isset ( $_FILES ['file'] ) && is_uploaded_file ( $_FILES ['file'] ['tmp_name'] )) { $old_name = $_FILES['file']['tmp_name']; $new_name = date("YmdHis"); $new_name .= mt_rand(); switch (exif_imagetype($_FILES['file']['tmp_name'])) { case IMAGETYPE_JPEG : $new_name .= '.jpg'; break; case IMAGETYPE_GIF : $new_name .= '.gif'; break; case IMAGETYPE_PNG : $new_name .= '.png'; break; default : header ( 'Location: upload.php' ); exit (); } $gazou = basename($_FILES['file']['name']); if (move_uploaded_file($old_name, 'upload/'.$new_name)) { echo $gazou . 'のアップロードに成功しました'; } else { echo 'アップロードに失敗しました'; } } if(!isset($_POST['delte'])){ unlink("upload/".$_POST['delete'].""); } ?> <!doctype html> <form action="#" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="ファイルをアップロードする"> <input type="hidden" name="MAX_FILE_SIZE" value="4194304" /> </form><br> <?php if(isset($_FILES['file']['name'])){ echo "<img src=\"upload/" .$new_name. "\"><br><br>"; } ?> <form action = "#" method = "post"> <input type = "submit" value ="削除する"> <input type="hidden" name="delete" value="<?php echo $new_name ?>"> </form>
PHP GDライブラリ colorize
<?php $im = imagecreatefromjpeg('img/20180302-0.jpeg'); echo '<img src="img/20180302-0.jpeg" width="200" height="120"><br>'; $r = '0'; $g = '255'; $b = '0'; if($im && imagefilter($im, IMG_FILTER_COLORIZE, $r, $g, $b)){ imagejpeg($im, 'colorized.jpeg'); imagedestroy($im); } echo '<img src="colorized.jpeg" width="200" height="120"><br>'; $im = imagecreatefromjpeg('img/20180302-0.jpeg'); $r1 = '255'; $g1 = '0'; $b1 = '0'; if($im && imagefilter($im, IMG_FILTER_COLORIZE, $r1, $g1, $b1)){ imagejpeg($im, 'colorized2.jpeg'); imagedestroy($im); } echo '<img src="colorized2.jpeg" width="200" height="120"><br>'; $im = imagecreatefromjpeg('img/20180302-0.jpeg'); $r2 = '0'; $g2 = '0'; $b2 = '255'; if($im && imagefilter($im, IMG_FILTER_COLORIZE, $r2, $g2, $b2)){ imagejpeg($im, 'colorized3.jpeg'); imagedestroy($im); } echo '<img src="colorized3.jpeg" width="200" height="120">';
photoshopのように、rgbを加工することができますね。
negate
<?php $im = imagecreatefromjpeg('img/20180302-0.jpeg'); echo '<img src="img/20180302-0.jpeg" width="200" height="120"><br>'; if($im && imagefilter($im, IMG_FILTER_NEGATE)){ imagejpeg($im, 'negated.jpeg'); imagedestroy($img); } echo '<img src="negated.jpeg" width="200" height="120"><br>'; ?>
画像の色を反転
その他、IMG_FILTER_GRAYSCALE, IMG_FILTER_BRIGHTNESS, IMG_FILTER_CONTRAST, IMG_FILTER_EDGEDETECT, IMG_FILTER_EMBOSS, IMG_FILTER_GAUSSIAN_BLUR, IMG_FILTER_SELECTIVE_BLUR, IMG_FILTER_MEAN_REMOVAL, IMG_FILTER_SMOOTH, IMG_FILTER_PIXELATEなどがあります。
<?php $im = imagecreatefromjpeg('img/20180302-0.jpeg'); echo '<img src="img/20180302-0.jpeg" width="200" height="120"><br>'; if($im && imagefilter($im, IMG_FILTER_PIXELATE, 15)){ imagejpeg($im, 'pixelated.jpeg'); imagedestroy($img); } echo '<img src="pixelated.jpeg" width="200" height="120"><br>'; ?>
画像をダウンロード
まずトップ画面 任意の写真を選択
ダウンロードするサイズを選択
1clickでダウンロード
おいおいおい。。
画像の縮小・拡大
元画像を縮小し、Getパラメーターでパスを送ります。
<?php $file1 = "img/20180331-0.jpeg"; $name = substr($file1, 4); $file2 = "img_s/".$name.""; $file3 = "img_s2/".$name.""; $in = ImageCreateFromJPEG($file1); //元画像ファイル読み込み $size = GetImageSize($file1); // 元画像サイズ取得 $width = $size[0] / 2; $height = $size[1] / 2; $out = ImageCreateTrueColor($width, $height); // 画像生成 ImageCopyResampled($out, $in, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); ImageJPEG($out, $file2); $width2 = $size[0] / 3; $height2 = $size[1] / 3; $out2 = ImageCreateTrueColor($width2, $height2); // 画像生成 ImageCopyResampled($out2, $in, 0, 0, 0, 0, $width2, $height2, $size[0], $size[1]); ImageJPEG($out2, $file3); ImageDestroy($in); ImageDestroy($out); ImageDestroy($ou2); ?> <?php echo (int)$width2.'x'.(int)$height2."px" ?> <a href="file.php?id=<?php echo $file3 ?>">JPEGでダウンロード</a> | <a href="">GIFでダウンロード</a><br> <img src="<?php echo $file3 ?>"><br> <br> <?php echo (int)$width.'x'.(int)$height."px" ?> <a href="file.php?id=<?php echo $file2 ?>">JPEGでダウンロード</a> | <a href="">GIFでダウンロード</a><br> <img src="<?php echo $file2 ?>"><br> <br> <?php echo $size[0].'x'.$size[1]. "px" ?> <a href="file.php?id=<?php echo $file ?>">JPEGでダウンロード</a> | <a href="">GIFでダウンロード</a><br> <img src="<?php echo $file1 ?>">
おいおいおい、これでいいのかよ?
phpでファイルのダウンロード
index.html
<a href="file.php">ダウンロード</a>
file.php
<?php $fpath = './img/20180331-0.jpeg'; $fname = '0.jpeg'; header('Content-Type: application/force-download'); header('Content-Length: '.filesize($fpath)); header('Content-disposition: attachment; filename="'.$fname.'"'); readfile($fpath); ?>
リンク押下でダウンロードが開始されます。
filesizeは指定したファイルのサイズを取得
readfile()は指定したファイル内容を全読み込んで標準出力に出力
pixtabay apiで遊んでみる その5 DB連携
pixtabay urlをUNIQUEで、テーブルをつくります。
CREATE TABLE img.pixtabay ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, pixtaurl VARCHAR(255) UNIQUE, imgurl VARCHAR(60), tags VARCHAR(255) );
続いて、apiから、画像を取得し、dbに画像のパス・タグを入れます。
$stmt = $dbh -> prepare("INSERT IGNORE INTO pixtabay (pixtaurl, imgurl, tags) VALUES(:pixtaurl, :imgurl, :tags)"); $date = date("Ymt"); $i=0; foreach($url as $value){ $data = file_get_contents($value); $pass = "img/" .$date. "-" . $i . ".jpeg"; $stmt->bindParam(':pixtaurl', $url[$i], PDO::PARAM_STR); $stmt->bindParam(':imgurl', $pass, PDO::PARAM_STR); $stmt->bindParam(':tags', $tags[$i], PDO::PARAM_STR); $stmt->execute(); file_put_contents($pass, $data); $i++; } ?>
検索クエリに一致するタグがある画像パスをDBから取得して表示
$query = "アップル"; while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ if(strpos($result["tags"], $query) !== false){ $url[] = $result["imgurl"]; } } echo "タグに". $query. "を含む画像<br>"; // var_dump($url); foreach($url as $value){ echo "<img src=\"" .$value. "\" width=\"200\" height=\"120\" >"; } ?>
ぎゃーーーー