verotのclass.uploadでboostrapファイルのアップロードを使用しています。私のコードはすべて正常に動作しますが、スクリプトが画像をトリミングする方法を決定するチェックボックスを追加する機能を追加したいと考えています。
$handle->image_ratio_crop = true; // basically zooms in on the middle (default)
$handle->image_ratio_fill = true; // preserves ratio and adds white bars where needed
ユーザーが画像の横にある image_ratio_fill をチェックすると、スクリプトのデフォルトの代わりにこれが使用されるようになります。現在、このページには 4 つの画像をアップロードできます。次のスクリプトは、各ファイルを反復処理し、必要なトリミング .etc を追加します。
PHP:
function upImageSpec($table, $m_x, $m_y, $t_x, $t_y)
{
$id = $_GET['id'];
$img_db_name = str_replace('s', '', $table); // this will replace the s with nothing so that it is user_image_1, project_image_1 for the db insertion
// unchanging variables
$ext = 'jpg';
$upload_path = FRONTEND_IMAGE_UPLOAD_PATH . slash_item($table) . slash_item($id); // will not work with /images/
// end unchanging variables
$files = array();
foreach ($_FILES['userfile'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
$counter = 1;
foreach ($files as $file) {
// foreach variables
$main_name = 'm_' . $id;
$thumb_name = 't_' . $id;
$count = $counter++;
// end foreach variables
$handle = new upload($file);
if ($handle->uploaded) {
// save uploaded image $m_x, $m_y
$mi = sprintf("%s_%d", $main_name, $count);
$full_src = REL_FRONTEND_IMAGE_UPLOAD_PATH . slash_item($table) . slash_item($id) . $mi . '.' . $ext;
$handle->file_new_name_body = $mi;
$handle->image_convert = $ext;
$handle->allowed = array(
'image/*'
);
$handle->file_max_size = MAX_IMAGE_FILE_SIZE;
$handle->jpeg_quality = 95;
$handle->image_resize = true;
//$handle->image_ratio_crop = true;
$handle->image_ratio_fill = true;
$handle->image_x = $m_x;
$handle->image_y = $m_y;
$handle->file_overwrite = true;
$handle->auto_create_dir = true;
$handle->process($upload_path);
if ($handle->processed) {
Nemesis::update($table, "last_modified = NOW(), last_modified_by = '{$_SESSION[user_id]}', {$img_db_name}_image_{$count} = '{$full_src}'", "id = '{$id}'");
} else {
$msg = new Messages();
$msg->add('e', $handle->error);
}
// thumbnail part, same as above, just w/ diff dimensions
}
unset($handle);
}
}
HTML:
<?php if ($totalRows_projects > 0) { ?>
<?php $msg = new Messages(); echo $msg->display(); ?>
<h2>Project Images<?php if (!empty($row_projects['project_name'])) { echo ': ' . $row_projects['project_name']; }?></h2>
<form action="framework/helpers/image_handler.php?type=upload&id=<?php echo $_GET['id']; ?>" method="post" enctype="multipart/form-data">
<?php $counter = 1; while ($row = $resultImages->fetch_assoc()) { $count = $counter++; ?>
<div class="fileupload fileupload-new" data-provides="fileupload">
<input type="hidden">
<div class="fileupload-new thumbnail" style="width: 104px; height: 76px;"><span id="img<?php echo $count; ?>"><img src="<?php getThumb($row_projects["project_image_$count"]); ?>"></span></div>
<div class="fileupload-preview fileupload-exists thumbnail" style="width: 104px; height: 76px; line-height: 50px; "></div>
<span class="btn btn-file"><span class="fileupload-new">Select image</span><span class="fileupload-exists">Change</span><input type="file" name="userfile[]" id="file<?php echo $count; ?>" class="search" multiple></span>
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a>
<?php if (is_file(ROOT . $row_projects["project_image_$count"])) { ?><a href="javascript:void(0);" onclick="$.get('framework/helpers/image_remove.php',{ cmd: 'deleteImage', image: '<?php echo $row_projects["project_image_$count"]; ?>' } ,function(data){ $('#img<?php echo $count; ?>').html(data); });" class="fileupload-controls btn btn-danger" title="Deletion is permanent!">Remove Existing</a><?php } ?>
<select name="cropfactor" class="select-ms">
<option value="1">Ratio Crop</option>
<option value="2">Ratio Fill</option>
</select>
</div>
<?php } ?>
<br><input name="submit" type="submit" id="submit" value="Add Project Image" class="btn btn-success"><a id="back" href="projects.php" class="btn btn-space" title="No changes will be made">Skip to Projects</a><?php if (!empty($row_projects['youtube_link'])) { ?><a id="yt_image" href="framework/helpers/image_handler.php?type=youtube&id=<?php echo $id; ?>&link=<?php echo $row_projects['youtube_link']; ?>" class="btn btn-space" title="Add Youtube still as a main image">Get YouTube Thumb</a><?php } ?>
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $MAX_IMAGE_FILE_SIZE ?>">
</form>
<?php } ?>
投稿時に、上のコードが送信され、image_handler.php を介して上記の関数によって処理されます
コードスニペット:
case 'upload':
if (checkIDExists()) {
upImageSpec('projects', 458, 332, 104, 76);
redirect('', true);
} else {
$msg = new Messages();
$msg->add('e', QUERY_ID_ERROR);
redirect('', true);
}
break;
cropfactor
比率塗りつぶしに変更された場合にデフォルト (比率クロップ) がオフに切り替えられ、使用されるように、フィールドをどのように使用するのでしょうかimage_ratio_fill
。ページ上の他の画像はデフォルトのままにしておくことをお勧めします。機能しなかった単純な if else ステートメントを試しました。