当前位置: 首页 > news >正文

C#进阶-ASP.NET实现可以缩放和旋转的图片预览页

本文详细介绍了如何在ASP.NET WebForms中实现一个功能丰富的图片预览页面。通过结合HTML、CSS和JavaScript,用户可以方便地对图片进行放大、缩小以及旋转操作。文章从页面的基本布局开始,逐步讲解了如何设置图片展示区、添加控制按钮、编写CSS样式以及实现JavaScript功能,最终展示了一个直观且易用的图片预览解决方案。通过这个项目,读者可以学会如何在Web应用中动态处理图片,提高用户交互体验。


一、实现思路

在现代Web应用中,用户对图片的操作需求日益增加,尤其是在图片展示时能够方便地进行放大、缩小以及旋转等操作。为了满足这些需求,本项目基于ASP.NET WebForms开发了一个图片预览页面,用户可以通过简单的按钮操作来调整图片的大小和角度。实现这一功能的核心在于使用HTML、CSS和JavaScript结合来动态调整图片的样式属性,以达到相应的效果。


二、实现步骤

1. 创建ASP.NET页面

首先,我们需要创建一个ASP.NET WebForms页面。在Visual Studio中,右键点击你的项目,选择添加 -> 新建项

在这里插入图片描述

选择Web 窗体,命名为 IMGShow.aspx

在这里插入图片描述


2. 添加HTML布局

接下来,在 IMGShow.aspx 文件中添加基本的HTML结构。这包括设置页面的DOCTYPEmeta标签、title等,以及link标签导入所需的CSS文件。以下是页面的基本结构:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IMGShow.aspx.cs" Inherits="WebForms.IMGShow" %>
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><title>图片展示</title><link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" /><script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>
<body class="easyui-layout" data-options="fit:true">
</body>
</html>

3. 设置图片展示区

body标签中,添加一个div容器,用于展示图片。这个容器需要设定宽度和高度,以保证图片能在页面居中显示。然后,使用img标签加载图片。这里,我们设置图片初始宽度为60%。

HTML代码里创建一个放置图片的DIV:

<div style="text-align: center; vertical-align: middle;" class="content"><img id="bigimg" src="a.png" width="60%" />
</div>

JavaScript代码里对图片路径赋值:

<script type="text/javascript">// 页面初始化时加载图片$(document).ready(function () {var path = window.location.href.split('=')[1];$("#bigimg").attr('src', path);});
</script>

在这里插入图片描述


4. 添加控制按钮

在图片展示区的下方,我们需要添加四个按钮,用于放大、缩小、左旋转和右旋转图片。每个按钮都绑定相应的JavaScript函数,点击后会执行特定的图片操作。

<div style="margin-top: 150px; margin-left: 50px"><a href="javascript:void(0)" class="btn icon-add" onclick="imgBigToSize()">放大</a><br /><br /><a href="javascript:void(0)" class="btn icon-remove" onclick="imgSmallToSize()">缩小</a><br /><br /><a href="javascript:void(0)" class="btn icon-arrow-turn-left" onclick="imgRotateLeft()">左旋转</a><br /><br /><a href="javascript:void(0)" class="btn icon-arrow-turn-right" onclick="imgRotateRight()">右旋转</a>
</div>

在这里插入图片描述


5. 编写CSS样式

为了美化页面,我们需要为按钮添加一些基本的样式。可以在<head>标签中添加<style>标签来定义这些样式。

<style>.content {width: 100%;height: 100%;position: absolute;background-color: white;overflow: hidden;background-position: 50%;}.btn {display: inline-block;padding: 5px 10px;margin: 5px;background-color: aliceblue;border: 1px solid #ccc;border-radius: 4px;text-decoration: none;color: #333;cursor: pointer;font-size: 14px;position: relative;padding-left: 30px; }.btn:hover {background-color: #f0f0f0;}.icon-add::before {content: url('images/add.png'); position: absolute;left: 10px;top: 50%;transform: translateY(-50%);}.icon-remove::before {content: url('images/remove.png'); position: absolute;left: 10px;top: 50%;transform: translateY(-50%);}.icon-arrow-turn-left::before {content: url('images/arrow_turn_left.png'); position: absolute;left: 10px;top: 50%;transform: translateY(-50%);}.icon-arrow-turn-right::before {content: url('images/arrow_turn_right.png'); position: absolute;left: 10px;top: 50%;transform: translateY(-50%);}
</style>

6. 添加缩放和旋转功能

在页面的<head>标签中,添加JavaScript脚本,分别实现放大、缩小、左旋转和右旋转功能。

<script type="text/javascript">// 放大图片function imgBigToSize() {var img = $("#bigimg");var oWidth = img.width();var oHeight = img.height();img.width(oWidth + 50);img.height(oHeight + 50 / oWidth * oHeight);};// 缩小图片function imgSmallToSize() {var img = $("#bigimg");var oWidth = img.width();var oHeight = img.height();img.width(oWidth - 50);img.height(oHeight - 50 / oWidth * oHeight);};var r = 0;// 左旋转图片function imgRotateLeft() {var img = $("#bigimg");r -= 90;img.css('transform', 'rotate(' + r + 'deg)');};// 右旋转图片function imgRotateRight() {var img = $("#bigimg");r += 90;img.css('transform', 'rotate(' + r + 'deg)');};// 页面初始化时加载图片$(document).ready(function () {var path = window.location.href.split('=')[1];$("#bigimg").attr('src', path);});
</script>

7. 测试并调整

最后,保存所有文件并运行项目。在浏览器中访问该页面,确保所有按钮功能正常工作。如果需要,可以根据需求进一步调整样式或功能。

通过这些步骤,你将创建一个ASP.NET WebForms页面,用户可以在其中放大、缩小和旋转图片。这些功能是通过JavaScript动态控制图片的widthheighttransform属性实现的。


三、实现效果

页面加载后,用户可以看到一张图片居中显示。通过点击页面下方的按钮,用户可以进行以下操作:

  • 放大图片:点击放大按钮,图片的宽度和高度按比例增大。
  • 缩小图片:点击缩小按钮,图片的宽度和高度按比例减小。
  • 左旋转图片:点击左旋转按钮,图片逆时针旋转90度。
  • 右旋转图片:点击右旋转按钮,图片顺时针旋转90度。

最终效果如图所示:

在这里插入图片描述
作为图片的预览页,我们一般会在点击图片时的事件中调用,下面提供两种常用的调用策略:

  • 页面跳转:用 window.location.href='IMGShow.aspx?imgStr=xxx'来调用,实现当前页面跳转到图片预览页面。

  • 新页面弹窗:用 window.open('IMGShow.aspx?imgStr=xxx', "_blank")来调用,在弹出的新窗口里显示。

这里提供一个可以定义弹窗大小的JavaScript方法:

function opendetailMode(url) {var iWidth = 1250;var iHeight = 700;var iTop = (window.innerHeight - iHeight) / 2;var iLeft = (window.innerWidth - iWidth) / 2;if (typeof (myphoto) != "undefined") {myphoto.close();}myphoto = window.open(url, "_blank", "menubar=0,scrollbars=1,scroll=no,resizable=0,status=1,titlebar=0,toolbar=0,location=0,width=" + iWidth + ",height=" + iHeight + ",top=" + iTop + ",left=" + iLeft);
}

四、实现总结

通过本项目,我们展示了如何使用ASP.NET WebForms结合HTML、CSS和JavaScript实现一个功能丰富的图片预览页面。这种方式不仅简单易用,而且可以满足大多数Web应用中对图片展示的基本需求。特别是通过JavaScript的动态操作,使得页面在响应用户交互时更加灵活和高效。


五、实现源码

下面是本页面的全部源码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IMGShow.aspx.cs" Inherits="WebForms.IMGShow" %><!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><title>图片展示</title><link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" /><script src="https://code.jquery.com/jquery-3.5.1.min.js"></script><style>.content {width: 100%;height: 100%;position: absolute;background-color: white;overflow: hidden;background-position: 50%;}.btn {display: inline-block;padding: 5px 10px;margin: 5px;background-color: aliceblue;border: 1px solid #ccc;border-radius: 4px;text-decoration: none;color: #333;cursor: pointer;font-size: 14px;position: relative;padding-left: 30px; }.btn:hover {background-color: #f0f0f0;}.icon-add::before {content: url('images/add.png'); position: absolute;left: 10px;top: 50%;transform: translateY(-50%);}.icon-remove::before {content: url('images/remove.png'); position: absolute;left: 10px;top: 50%;transform: translateY(-50%);}.icon-arrow-turn-left::before {content: url('images/arrow_turn_left.png'); position: absolute;left: 10px;top: 50%;transform: translateY(-50%);}.icon-arrow-turn-right::before {content: url('images/arrow_turn_right.png'); position: absolute;left: 10px;top: 50%;transform: translateY(-50%);}</style><script type="text/javascript">// 放大图片function imgBigToSize() {var img = $("#bigimg");var oWidth = img.width();var oHeight = img.height();img.width(oWidth + 50);img.height(oHeight + 50 / oWidth * oHeight);};// 缩小图片function imgSmallToSize() {var img = $("#bigimg");var oWidth = img.width();var oHeight = img.height();img.width(oWidth - 50);img.height(oHeight - 50 / oWidth * oHeight);};var r = 0;// 左旋转图片function imgRotateLeft() {var img = $("#bigimg");r -= 90;img.css('transform', 'rotate(' + r + 'deg)');};// 右旋转图片function imgRotateRight() {var img = $("#bigimg");r += 90;img.css('transform', 'rotate(' + r + 'deg)');};// 页面初始化时加载图片$(document).ready(function () {var path = window.location.href.split('=')[1];$("#bigimg").attr('src', path);});</script></head>
<body class="easyui-layout" data-options="fit:true"><div style="text-align: center; vertical-align: middle;" class="content"><img id="bigimg" src="a.png" width="60%" /></div><br /><div style="margin-top: 150px; margin-left: 50px"><a href="javascript:void(0)" class="btn icon-add" onclick="imgBigToSize()">放大</a><br /><br /><a href="javascript:void(0)" class="btn icon-remove" onclick="imgSmallToSize()">缩小</a><br /><br /><a href="javascript:void(0)" class="btn icon-arrow-turn-left" onclick="imgRotateLeft()">左旋转</a><br /><br /><a href="javascript:void(0)" class="btn icon-arrow-turn-right" onclick="imgRotateRight()">右旋转</a></div>
</body></html>

相关文章:

C#进阶-ASP.NET实现可以缩放和旋转的图片预览页

本文详细介绍了如何在ASP.NET WebForms中实现一个功能丰富的图片预览页面。通过结合HTML、CSS和JavaScript&#xff0c;用户可以方便地对图片进行放大、缩小以及旋转操作。文章从页面的基本布局开始&#xff0c;逐步讲解了如何设置图片展示区、添加控制按钮、编写CSS样式以及实…...

【小程序 - 大智慧】深入微信小程序的核心原理

目录 课程目标背景双线程架构WebView 结构快速渲染 PageFrame编译原理Exparser通讯系统生命周期基础库解包跨端框架预编译半编译半运行运行时框架 主流技术Tarouni-app汇总 下周安排 课程目标 本次课程主要通过后台管理小程序回顾一下小程序的高阶语法&#xff0c;然后讲解整体…...

Qt 去掉QDialog对话框的问号

QT 对话框的问号是什么&#xff1f; QDialog默认的window flag中包含了Qt::WindowContextHelpButtonHint,这个flag意思是在窗口上提供“上下文帮助”按钮 使用方式/调用方式 void QWidget::setWhatsThis(const QString &)比如&#xff1a; ui->lineEdit_1->setWh…...

负载均衡 Ribbon 与 Fegin 远程调用原理

文章目录 一、什么是负载均衡二、Ribbon 负载均衡2.1 Ribbon 使用2.2 Ribbon 实现原理 (★)2.3 Ribbon 负载均衡算法 三、Feign 远程调用3.1 Feign 简述3.2 Feign 的集成3.3 Feign 实现原理 (★) 一、什么是负载均衡 《服务治理&#xff1a;Nacos 注册中心》 末尾提到了负载均…...

c/c++:CMakeLists.txt中添加编译/连接选项使用内存错误检测工具Address Sanitizer(ASan)

Address Sanitizer(ASan)是一个快速的内存错误检测工具。从gcc 4.8开始&#xff0c;AddressSanitizer成为gcc的一部分。 既然是gcc内置的内存检查工具&#xff0c;用起来比第三方的库更方便些。只要指定相应的编译链接参数就可以实现内存泄露检查了&#xff0c;如下是是cmake脚…...

armbian cups 远程打印机 1022

使用 CUPS Web 浏览器界面设置和管理打印机 - Oracle Solaris 管理&#xff1a;常见任务 N1刷armbian变身打印服务器&#xff0c;支持全平台无线打印PC扫描_存储设备_什么值得买 (smzdm.com) 第 6 章 使用 Web 界面向 CUPS 添加打印机 | Red Hat Product Documentation apt…...

three.js使用3DTilesRendererJS加载3d tiles数据

原生的 three.js 目前不支持 3d tiles 数据的加载&#xff0c;不过开源社区已经给出了一些解决方案&#xff0c;其中最活跃的要属 3DTilesRendererJS。它为 three.js 提供了加载和调度 3d tiles 数据的基本能力&#xff0c;虽说和 Cesium.js 对 3d tiles 的支持相比还有很大的差…...

坐牢第三十五天(c++)

一.作业 1.使用模版类自定义栈 代码&#xff1a; #include <iostream> using namespace std; template<typename T> // 封装一个栈 class stcak { private:T *data; //int max_size; // 最大容量int top; // 下标 public:// 无参构造函数stcak();// 有参…...

Conda离线部署django

要在没有网络连接的环境中使用conda部署Django&#xff0c;你需要预先在有网络连接的机器上创建一个包含所有必要包的环境&#xff0c;并导出该环境的配置文件。然后&#xff0c;你可以将这个配置文件和必要的包传输到目标机器上进行安装。 下面是详细的步骤&#xff1a; 1. …...

1. Fabric.js安装使用

安装 # 安装 fabricjs npm i fabric --save在需要使用的页面引入 import * as fabric from fabric...

Excel中.xls和.xlsx文件格式的区别,及C++操作Excel文件

‌文件结构和兼容性‌&#xff1a; XLS是Excel 97-2003版本的文件格式&#xff0c;而XLSX是Excel 2007及以上版本的文件格式。XLS格式是向下兼容的&#xff0c;意味着较新的Excel版本可以打开XLS文件&#xff0c;但较旧的版本无法打开XLSX文件。相反&#xff0c;XLSX格式是向上…...

php实用命令

php相关命令 命令错误级别 命令 命令命令介绍具体用法php -v查看php版本php -vphp -l检查php文件是否有语法错误php -lphp -m查看当前php安装的扩展php -mphp -i | grep extension_dir查看扩展安装的目录php -i | grep extension_dir 错误级别 命令命令介绍具体用法error_re…...

TypeError:未绑定方法

TypeError: unbound method 错误通常发生在类方法被调用时&#xff0c;但没有正确绑定到实例。这通常意味着你试图在类本身上调用一个实例方法&#xff0c;或者没有使用正确的方式创建类实例。 1、问题背景 某位开发者在尝试创建一个类似于经典的 Pratt 递归下降解析器时遇到了…...

Java虚拟机(JVM)的架构和工作原理,字节码执行流程

JVM的概念 JVM是Java Virtual Machine的缩写&#xff0c; 即Java虚拟机&#xff0c;也被称为Java程序运行的核心环境 。它是一种用于计算设备的规范&#xff0c;‌通过在实际的计算机上仿真模拟各种计算机功能来实现。‌JVM由一套字节码指令集、‌一组寄存器、‌一个栈、‌一个…...

416.分割等和子集

416.分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和…...

python初始化一个三维数组

文章目录 1.什么是三维数组2.那我应该如何初始化一个自定义长度的三维数组呢&#xff1f; 1.什么是三维数组 从最外层开始理解&#xff0c;可以理解为一维数组&#xff0c;里面套了一个二维数组&#xff08;12等于三维数组&#xff09; arr [ [[], []], [[], [], []], [[],[]]…...

EI会议推荐-第二届大数据与数据挖掘国际会议(BDDM 2024)

第二届大数据与数据挖掘国际会议&#xff08;BDDM 2024&#xff09; 1、基本信息 大会官网&#xff1a;http://www.icbddm.org/ 官方邮箱&#xff1a;icbddm163.com 主办方&#xff1a;武汉纺织大学 会议时间&#xff1a;2024年12月13日-12月15日 会议地点&#xff1a;湖…...

RK3566/RK3568 Android 11 动态显示/隐藏下拉框

概述 在系统服务中增加显示/隐藏状态栏方法,在上层app动态调用显示/隐藏下拉框方法,设备关机和重启后也能继续生效。 创建全局变量 1.定义全局变量 在frameworks/base/core/java/android/provider/Settings.java中添加 /*** Disable drop-down box* @hide*/public static…...

Android图片缓存工具类LruCache原理和使用介绍

LruCache & DiskLruCache原理。 常用的三级缓存主要有LruCache、DiskLruCache、网络&#xff0c;其中LruCache对应内存缓存、 DiskLruCache对应持久化缓存。Lru表示最近最少使用&#xff0c;意思是当缓存到达限制时候&#xff0c;优先淘汰近 期内最少使用的缓存&#xff0c…...

生活杂记1

生命中&#xff0c;总有一些事需要你一生去治愈&#xff0c;我把这些杂记写出来&#xff0c;写完了就不再想了&#xff0c;太内耗了…hahaha~ 因为嘴馋&#xff0c;小时候经常去老姑家&#xff0c;她家有各类零食及平时很少吃的“山珍海味”。去的次数多了&#xff0c;就和她家…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

深度解析云存储:概念、架构与应用实践

在数据爆炸式增长的时代&#xff0c;传统本地存储因容量限制、管理复杂等问题&#xff0c;已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性&#xff0c;成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理&#xff0c;云存储正重塑数据存储与…...