Discuz 头像图片上传程序简介
一 . 设置flsah 上传首先根据程序找到对应的模版是 template/ default/ spacecp_avaster.htm ;
discuz通过 flash上传并且将对应的参数和值传递给php进行处理;
首先运行函数
<script type="text/javascript">
document.write(AC_FL_Runcontent((‘<!--{echo implode("’,’" , $uc avatarflash);}-->’));
</script>
$uc_avatarflash是一个数组,主要是带有flash的各种参数;
通过调用 source/include/spacep_avaster.php文件,
中的 $uc_avatarflash = uc_avatar(S_G[ uid] , ' virtual' , 0 );
设置这个函数的位置实在 \uc_client\ client.php根据调用参数,返回这个数组;
return array(
'width' => 450,
'height' => 253,
'scale' => 'exactfit',
'src' => $uc_avatarflash,
'id' => 'mycamera',
'name' => 'mycamera',
'quality' => 'high',
'bgcolor' => '#ffffff',
'menu' => 'false',
'swliveconnect' => 'true',
'allowscriptAccess' => 'always'
);
这个数据返回给 AC_Fl_RunContent 函数设置 flash的参数;
二、接受参数并处理
原理, flash上传只要是通过生成一个临时文件,在把这个临时的图片文件转
化成16进制数字, 最后,通过 flash_decode降图片以不同尺寸存放到不同的目录
1,生成临时图片文件,调用社区目录下的uc_ server/ control/user.php
中的 onuploadavatar生成临时文件;
2裁切图片(将图片转换成16进制,再进行裁切)
函数位置 :uc_server/control/user.php
函数 : onuploadavatar();
函数flash_decode(); 接收参数 , 将图片裁切成不同尺寸 , 这里的不同尺寸的16进制数据 主要是通过flash传递给php 例如 getgpc(‘avatarl’,’P’);
在Discuz中,头像上传功能是通过Flash实现的,主要涉及到前端和后端的交互。以下是详细的流程和代码解析:
### 一、设置Flash上传
1. **模板文件**:`template/default/spacecp_avaster.htm`
- 这个模板文件负责生成前端页面,包含Flash上传组件的HTML代码。
- 通过`document.write(AC_FL_RunContent(...));`函数生成Flash对象。
2. **Flash参数设置**:
- `$uc_avatarflash` 是一个数组,包含了Flash上传组件的各种参数。
- 这个数组通过调用 `source/include/spacecp_avatar.php` 文件中的 `$uc_avatarflash = uc_avatar(S_G, 'virtual', 0);` 函数生成。
- `uc_avatar` 函数位于 `uc_client/client.php` 文件中,根据传入的参数返回一个包含Flash参数的数组。
return array(
'width' => 450,
'height' => 253,
'scale' => 'exactfit',
'src' => $uc_avatarflash,
'id' => 'mycamera',
'name' => 'mycamera',
'quality' => 'high',
'bgcolor' => '#ffffff',
'menu' => 'false',
'swliveconnect' => 'true',
'allowscriptAccess' => 'always'
);
- 这个数组返回给 `AC_FL_RunContent` 函数,用于设置Flash的参数。
### 二、接受参数并处理
1. **生成临时图片文件**:
- Flash上传的图片会生成一个临时文件。
- 这个临时文件通过调用 `uc_server/control/user.php` 文件中的 `onuploadavatar` 函数生成。
2. **裁切图片**:
- 图片裁切的过程是将图片转换成16进制数据,然后进行裁切。
- 裁切函数 `onuploadavatar` 位于 `uc_server/control/user.php` 文件中。
- 这个函数会接收Flash传递的参数,并将图片裁切成不同尺寸。
3. **图片处理**:
- `flash_decode` 函数接收参数,将图片裁切成不同尺寸。
- 不同尺寸的16进制数据通过Flash传递给PHP,例如通过 `getgpc('avatarl', 'P');` 获取。
### 三、代码示例
以下是一个简化的代码示例,展示如何通过Flash上传头像并处理:
// 在 spacecp_avatar.php 中调用 uc_avatar 函数
$uc_avatarflash = uc_avatar(S_G, 'virtual', 0);
// uc_avatar 函数返回的数组
return array(
'width' => 450,
'height' => 253,
'scale' => 'exactfit',
'src' => $uc_avatarflash,
'id' => 'mycamera',
'name' => 'mycamera',
'quality' => 'high',
'bgcolor' => '#ffffff',
'menu' => 'false',
'swliveconnect' => 'true',
'allowscriptAccess' => 'always'
);
// 在 user.php 中处理上传的图片
function onuploadavatar() {
// 生成临时文件
$tempFile = $_FILES['avatar']['tmp_name'];
// 将图片转换成16进制数据
$imageData = file_get_contents($tempFile);
// 裁切图片
$avatarSmall = $this->resizeImage($imageData, 50, 50);
$avatarMedium = $this->resizeImage($imageData, 100, 100);
$avatarLarge = $this->resizeImage($imageData, 200, 200);
// 保存裁切后的图片
$this->saveAvatar($avatarSmall, 'small');
$this->saveAvatar($avatarMedium, 'medium');
$this->saveAvatar($avatarLarge, 'large');
}
// 裁切图片的函数
function resizeImage($imageData, $width, $height) {
// 这里实现图片裁切逻辑
// ...
return $resizedImage;
}
// 保存图片的函数
function saveAvatar($imageData, $size) {
// 这里实现保存图片逻辑
// ...
}
### 四、总结
Discuz的头像上传功能通过Flash实现,前端通过Flash组件上传图片,后端通过PHP处理图片并生成不同尺寸的头像。整个过程涉及到Flash参数的设置、临时文件的生成、图片的裁切和保存等步骤。通过理解这些步骤,可以更好地定制和优化Discuz的头像上传功能。
如果你有更多关于Discuz开发的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 在Discuz中,头像上传功能是通过Flash技术实现的,主要涉及到前端Flash上传和后端PHP处理。以下是详细的流程和代码解析:
### 一、设置Flash上传
1. **模板文件**:`template/default/spacecp_avaster.htm`
- 这个模板文件负责生成Flash上传的HTML代码。
- 通过`document.write(AC_FL_RunContent(...));`函数来生成Flash对象。
2. **Flash参数设置**:
- `$uc_avatarflash` 是一个数组,包含了Flash上传所需的各种参数。
- 这个数组是通过调用 `source/include/spacep_avaster.php` 文件中的 `$uc_avatarflash = uc_avatar(S_G, 'virtual', 0);` 函数生成的。
3. **`uc_avatar` 函数**:
- 这个函数位于 `\uc_client\client.php` 文件中。
- 它根据传入的参数生成并返回一个包含Flash参数的数组。
return array(
'width' => 450,
'height' => 253,
'scale' => 'exactfit',
'src' => $uc_avatarflash,
'id' => 'mycamera',
'name' => 'mycamera',
'quality' => 'high',
'bgcolor' => '#ffffff',
'menu' => 'false',
'swliveconnect' => 'true',
'allowscriptAccess' => 'always'
);
- 这个数组最终会被传递给 `AC_FL_RunContent` 函数,用于设置Flash的参数。
### 二、接受参数并处理
1. **生成临时图片文件**:
- Flash上传的图片会生成一个临时文件。
- 这个临时文件是通过调用 `uc_server/control/user.php` 文件中的 `onuploadavatar` 函数生成的。
2. **裁切图片**:
- 图片上传后,会通过 `flash_decode` 函数将图片裁切成不同尺寸。
- 这个函数位于 `uc_server/control/user.php` 文件中。
- 裁切后的图片会以16进制数据的形式传递给PHP处理。
function onuploadavatar() {
// 生成临时文件
$tempFile = $this->generateTempFile();
// 裁切图片
$this->cropImage($tempFile);
// 将图片转换成16进制
$hexData = $this->convertToHex($tempFile);
// 处理不同尺寸的图片
$this->processDifferentSizes($hexData);
}
3. **`flash_decode` 函数**:
- 这个函数接收Flash传递的参数,并将图片裁切成不同尺寸。
- 裁切后的图片会以16进制数据的形式传递给PHP处理。
function flash_decode() {
// 接收参数
$avatarData = getgpc('avatarl', 'P');
// 裁切图片
$this->cropImage($avatarData);
// 将图片转换成16进制
$hexData = $this->convertToHex($avatarData);
// 处理不同尺寸的图片
$this->processDifferentSizes($hexData);
}
### 三、总结
- **前端**:通过Flash上传图片,生成临时文件。
- **后端**:通过PHP处理临时文件,裁切图片并生成不同尺寸的头像。
- **关键函数**:`uc_avatar`、`onuploadavatar`、`flash_decode`。
通过这些步骤,Discuz实现了用户头像的上传和裁切功能。如果你有更多关于Discuz开发的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]