PHP 图像处理实战 GD/Imagick 从入门到精通,构建高性能图像服务

news/2025/10/9 7:59:50/文章来源:https://www.cnblogs.com/catchadmin/p/19130368

PHP 图像处理实战 GD/Imagick 从入门到精通,构建高性能图像服务

网页上经常能看到模糊的用户头像、被拉伸变形的卡片图片,还有动辄几 MB 大小的 JPEG 文件。其实这些问题完全可以避免,关键在于建立合适的图像处理流程。

造成这些问题的原因很常见:PHP 应用没有处理 EXIF 方向数据,图像缩放时用错了适配算法,输出时采用了低效的编码参数。本文将提供一套完整的解决方案:从技术原理到实用代码,帮你构建高效的图像处理工作流。我们优先推荐使用内置的 GD 库,在需要高级功能时再考虑 Imagick。

原文链接-PHP 图像处理实战 GD/Imagick 从入门到精通,构建高性能图像服务

核心价值

  • 构建可靠的 PHP 图像处理流水线,支持尺寸调整、裁剪、方向校正和文件优化
  • 基于明确的技术指标选择 GD 或 Imagick,避免盲目决策
  • 掌握 cover 和 contain 适配模式的正确应用,支持自定义焦点
  • 合理选择现代图像格式(WebP/AVIF、渐进式 JPEG)和压缩参数
  • 实现带缓存机制的按需图像服务端点,并提供性能监控工具

核心概念

GD vs Imagick 选择: GD 是大多数主机的标配库,PHP 8 开始使用 GdImage 对象(相比早期的资源类型更加清晰)。Imagick 支持色彩配置文件、动画 GIF、高级滤镜等功能,但需要额外的系统依赖且受安全策略限制。

图像适配模式:

  • Cover 模式:填充目标区域并裁剪多余部分,适用于固定尺寸的缩略图和横幅图片
  • Contain 模式:完整显示图像内容并保持比例,必要时添加边距,适用于展示完整图像的场景

方向处理: 移动设备拍摄的照片通常将旋转信息记录在 EXIF 数据中,而非像素层面。图像变换前需要先处理方向信息。

格式优化: 优先输出 WebP 格式(支持时可选 AVIF),其次是渐进式 JPEG 或 PNG。通常应移除元数据,但可保留必要的 ICC 色彩配置文件。

透明度和色彩: JPEG 不支持透明度,PNG/WebP/AVIF 支持。对于色彩要求严格的产品图片,建议使用 Imagick 将色彩配置文件转换为 sRGB 标准,而非简单删除。

技术选型建议

大多数 Web 应用并不需要 Imagick。GD 库配合几个核心函数(imagescaleimagecropimagewebpimageinterlace)即可满足 90% 的需求。只有在确实需要以下功能时才考虑 Imagick:色彩配置文件管理、CMYK 支持、动画 GIF 处理、HEIC/AVIF 格式解码、高级滤镜效果等。优先保持技术栈的简单性和可靠性。

安全实践原则

  • 基于文件内容而非文件名进行检测,使用 getimagesize()finfo_file() 验证图片尺寸和 MIME 类型
  • 设置合理的像素数上限,防止内存溢出。建议将上传文件限制在 40-80 百万像素以内
  • 处理 JPEG 图片时,在执行任何变换操作前先根据 EXIF 信息校正图像方向
  • 严格验证输入参数(宽度、高度、格式、质量等),拒绝异常值
  • 上传文件存储在 Web 根目录之外,仅在安全目录中提供处理后的图像输出

GD:可复制粘贴的助手函数

图像加载、方向校正与安全检查(GD + EXIF)

<?php
function loadImage(string $path): array {if (!is_readable($path)) throw new RuntimeException("Not readable: $path");$info = @getimagesize($path);if (!$info) throw new RuntimeException("Not an image: $path");[$w, $h] = $info;$mime = $info['mime'] ?? '';if ($w * $h > 50_000_000) { // ~50 MP 保护throw new RuntimeException("Too large: {$w}x{$h}");}switch ($mime) {case 'image/jpeg': $img = imagecreatefromjpeg($path); break;case 'image/png':  $img = imagecreatefrompng($path);  break;case 'image/webp': $img = function_exists('imagecreatefromwebp') ? imagecreatefromwebp($path) : null; break;default: throw new RuntimeException("Unsupported type: $mime");}if (!$img) throw new RuntimeException("Failed to load: $path");// 修复 EXIF 方向(JPEG)if ($mime === 'image/jpeg' && function_exists('exif_read_data')) {$exif = @exif_read_data($path);$orientation = (int)($exif['Orientation'] ?? 1);$img = orientGd($img, $orientation);}// 确保 PNG/WebP 的透明度if ($mime === 'image/png' || $mime === 'image/webp') {imagesavealpha($img, true);imagealphablending($img, false);}return [$img, $mime, $w, $h];
}function orientGd(\GdImage $img, int $o): \GdImage {switch ($o) {case 3:  return imagerotate($img, 180, 0);case 6:  return imagerotate($img, -90, 0);case 8:  return imagerotate($img, 90, 0);case 2:  imageflip($img, IMG_FLIP_HORIZONTAL); return $img;case 4:  imageflip($img, IMG_FLIP_VERTICAL);   return $img;case 5:  $r = imagerotate($img, -90, 0); imageflip($r, IMG_FLIP_HORIZONTAL); return $r;case 7:  $r = imagerotate($img, 90, 0);  imageflip($r, IMG_FLIP_HORIZONTAL); return $r;default: return $img;}
}

图像适配算法:Cover 和 Contain 模式(居中对齐,支持透明度)

function resizeCover(\GdImage $src, int $tw, int $th, float $fx=0.5, float $fy=0.5): \GdImage {$sw = imagesx($src); $sh = imagesy($src);$scale = max($tw / $sw, $th / $sh);$cw = (int)ceil($tw / $scale);$ch = (int)ceil($th / $scale);$sx = (int)max(0, min($sw - $cw, $fx * $sw - $cw / 2));$sy = (int)max(0, min($sh - $ch, $fy * $sh - $ch / 2));$dst = imagecreatetruecolor($tw, $th);imagesavealpha($dst, true);$transparent = imagecolorallocatealpha($dst, 0, 0, 0, 127);imagefill($dst, 0, 0, $transparent);imagealphablending($dst, false);imagecopyresampled($dst, $src, 0, 0, $sx, $sy, $tw, $th, $cw, $ch);return $dst;
}function resizeContain(\GdImage $src, int $tw, int $th, ?array $bg=null): \GdImage {$sw = imagesx($src); $sh = imagesy($src);$scale = min($tw / $sw, $th / $sh, 1.0);$nw = max(1, (int)floor($sw * $scale));$nh = max(1, (int)floor($sh * $scale));$dx = (int)floor(($tw - $nw) / 2);$dy = (int)floor(($th - $nh) / 2);$dst = imagecreatetruecolor($tw, $th);if ($bg === null) {imagesavealpha($dst, true);$transparent = imagecolorallocatealpha($dst, 0, 0, 0, 127);imagefill($dst, 0, 0, $transparent);imagealphablending($dst, false);} else {[$r,$g,$b] = $bg;$color = imagecolorallocate($dst, $r, $g, $b);imagefill($dst, 0, 0, $color);}imagecopyresampled($dst, $src, $dx, $dy, 0, 0, $nw, $nh, $sw, $sh);return $dst;
}

优化图像保存(支持 WebP/AVIF,自动回退至 JPEG/PNG)

function saveOptimized(\GdImage $img, string $dest, string $format, array $opts=[]): void {$f = strtolower($format);if ($f === 'avif' && function_exists('imageavif')) {$q = $opts['quality'] ?? 80;if (!imageavif($img, $dest, $q)) throw new RuntimeException("Failed AVIF: $dest");return;}if ($f === 'webp' && function_exists('imagewebp')) {$q = $opts['quality'] ?? 80;imagesavealpha($img, true);if (!imagewebp($img, $dest, $q)) throw new RuntimeException("Failed WebP: $dest");return;}if ($f === 'png') {$level = $opts['compression'] ?? 6;imagesavealpha($img, true);if (!imagepng($img, $dest, $level)) throw new RuntimeException("Failed PNG: $dest");return;}// JPEG 格式回退(启用渐进式加载)$q = max(60, min(90, (int)($opts['quality'] ?? 82)));imageinterlace($img, true);if (!imagejpeg($img, $dest, $q)) throw new RuntimeException("Failed JPEG: $dest");
}

实用代码示例

方形头像生成(Cover 模式,中心焦点)→ 256×256 WebP

[$img] = loadImage(__DIR__.'/uploads/user123.jpg');
$thumb = resizeCover($img, 256, 256);
saveOptimized($thumb, __DIR__.'/public/avatars/user123.webp', 'webp', ['quality'=>82]);

产品缩略图生成(Contain 模式,白色背景)→ 600×400 渐进式 JPEG

[$img] = loadImage(__DIR__.'/uploads/sku-42.png');
$thumb = resizeContain($img, 600, 400, [255,255,255]);
saveOptimized($thumb, __DIR__.'/public/thumbs/sku-42.jpg', 'jpeg', ['quality'=>80]);

Imagick:更简洁的高级功能

当系统支持 Imagick 扩展时(可通过 php -m | grep imagick 检查),可以使用其提供的自动方向校正、色彩配置文件处理、动画 GIF 支持以及更高质量的图像滤镜。

<?php
function imagickCover(string $in, int $tw, int $th, string $out, string $format, array $opts=[]): void {$im = new Imagick($in);$im->setIteratorIndex(0);$im->autoOrient(); // 处理 EXIF 方向信息$im->cropThumbnailImage($tw, $th); // Cover 模式裁剪,使用高质量滤镜$fmt = strtolower($format);$im->stripImage(); // 删除元数据以减小文件大小if ($fmt === 'jpeg' || $fmt === 'jpg') {$im->setImageFormat('jpeg');$im->setImageCompressionQuality($opts['quality'] ?? 82);$im->setInterlaceScheme(Imagick::INTERLACE_PLANE);} elseif ($fmt === 'webp') {$im->setImageFormat('webp');$im->setOption('webp:method', (string)($opts['method'] ?? 6)); // 压缩方法,范围 0-6$im->setImageCompressionQuality($opts['quality'] ?? 80);} elseif ($fmt === 'avif') {$im->setImageFormat('avif');$im->setImageCompressionQuality($opts['quality'] ?? 45);} else {$im->setImageFormat($fmt); // PNG 等其他格式}if (!$im->writeImage($out)) throw new RuntimeException("Failed to write: $out");$im->clear(); $im->destroy();
}function imagickContain(string $in, int $tw, int $th, string $out, string $format, string $bg='white'): void {$im = new Imagick($in);$im->autoOrient();$im->thumbnailImage($tw, $th, true); // 等比例缩放$canvas = new Imagick(); $canvas->newImage($tw, $th, $bg);$x = (int)(($tw - $im->getImageWidth())/2);$y = (int)(($th - $im->getImageHeight())/2);$canvas->compositeImage($im, Imagick::COMPOSITE_OVER, $x, $y);$canvas->stripImage();$canvas->setImageFormat($format);$canvas->writeImage($out);$canvas->destroy(); $im->destroy();
}

动画 GIF 处理说明: 处理动画图片时,需要在调整大小前调用 coalesceImages() 方法,处理完成后使用 optimizeImageLayers() 进行优化。

按需图像处理服务(含缓存机制)

通过单个脚本实现图像变换、缓存和输出功能,适用于原型开发和中等访问量的应用场景。

<?php
// /public/image.php?src=uploads/hero.jpg&w=1600&h=900&fit=cover&fmt=webp&q=80
declare(strict_types=1);
require __DIR__.'/image_helpers.php'; // 引入上面定义的辅助函数$src = realpath(__DIR__.'/'.($_GET['src'] ?? '')) ?: '';
if ($src === '' || !str_starts_with($src, realpath(__DIR__))) {http_response_code(400); exit('Bad src');
}
$w   = max(1, (int)($_GET['w'] ?? 800));
$h   = max(1, (int)($_GET['h'] ?? 600));
$fit = $_GET['fit'] ?? 'cover'; // 适配模式:cover 或 contain
$fmt = strtolower($_GET['fmt'] ?? 'webp');
$q   = (int)($_GET['q'] ?? 82);
$cacheKey = sha1("$src|$w|$h|$fit|$fmt|$q");
$cacheDir = __DIR__.'/cache';
$outPath  = "$cacheDir/$cacheKey.$fmt";if (!is_dir($cacheDir)) mkdir($cacheDir, 0775, true);if (!file_exists($outPath)) {[$img] = loadImage($src);$dst = ($fit === 'contain') ? resizeContain($img, $w, $h) : resizeCover($img, $w, $h);saveOptimized($dst, $outPath, $fmt, ['quality'=>$q]);
}// 设置 HTTP 缓存头
$mtime = filemtime($outPath);
$etag = '"' . md5($cacheKey . $mtime) . '"';
header('ETag: '.$etag);
header('Cache-Control: public, max-age=31536000, immutable');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $mtime).' GMT');
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'] ?? '') >= $mtime ||trim($_SERVER['HTTP_IF_NONE_MATCH'] ?? '') === $etag) {http_response_code(304); exit;
}$mime = ['jpg'=>'image/jpeg','jpeg'=>'image/jpeg','png'=>'image/png','webp'=>'image/webp','avif'=>'image/avif'][$fmt] ?? 'application/octet-stream';
header('Content-Type: '.$mime);
readfile($outPath);

配合 <picture> 元素实现响应式图像:

<picture><source srcset="/image.php?src=uploads/hero.jpg&w=1600&h=900&fit=cover&fmt=webp&q=80" type="image/webp" /><img src="/image.php?src=uploads/hero.jpg&w=1600&h=900&fit=cover&fmt=jpeg&q=82" alt="Hero" width="1600" height="900" loading="lazy" decoding="async" />
</picture>

实际案例:iPhone 照片转换为横幅图(文件大小 < 250 KB)

场景描述: 原始文件为 4032×3024 JPEG(约 3.5-5.5 MB),目标是生成 1600×900 的横幅图,文件大小控制在 250 KB 以内。

处理流程:

  1. 校正图像方向(基于 EXIF 数据)
  2. 采用 Cover 模式调整为 1600×900,可根据存储的焦点设置偏移量 (fx, fy) = (0.4, 0.35)
  3. 输出格式选择:WebP(quality=80)或渐进式 JPEG(quality=78-82)
  4. 移除不必要的元数据信息

预期效果: WebP 格式约 180-240 KB,JPEG 格式约 260-340 KB;AVIF(quality=45)通常为 150-200 KB(编码时间较长)。

常见问题与解决方案

  • 方向错误问题 → 导致裁剪方向偏差。解决方案:处理前先根据 EXIF 数据校正图像方向。
  • 图像放大问题 → 造成图像模糊和文件臃肿。解决方案:限制目标尺寸不超过原始图像尺寸。
  • 透明度丢失 → Alpha 通道处理不当导致边缘出现杂色。解决方案:使用 imagesavealpha() 保持透明度,或为 JPEG 格式合成背景色。
  • 色彩偏移问题 → 删除 ICC 配置文件可能影响产品图片的色彩准确性。解决方案:使用 Imagick 转换至 sRGB 色彩空间,或保留原始配置文件。
  • 动画处理限制 → GD 仅处理首帧。解决方案:使用 Imagick 并在调整大小前调用 coalesceImages() 方法。
  • 内存消耗过大 → 内存使用量约为 宽度 × 高度 × 4 字节。解决方案:设置像素数量上限,大批量处理建议预生成。
  • 服务器安全策略 → Imagick 可能受 policy.xml 安全策略限制。解决方案:准备 GD/JPEG/PNG 格式的备用方案。
  • 质量参数差异 → PNG 的 "compression" 参数不等同于 "quality",WebP/AVIF 的质量刻度非线性。解决方案:使用实际图片测试验证效果。

性能监控与优化

为图像处理流水线添加监控工具,量化处理效果:

$start = microtime(true);
$before = filesize($srcPath);
// ... 图像处理逻辑 ...
$after = filesize($outPath);
$ms = (microtime(true) - $start) * 1000;
$peakMb = memory_get_peak_usage(true) / (1024*1024);
error_log(json_encode(['op'=>'resize-cover','src_bytes'=>$before,'dst_bytes'=>$after,'saved'=>$before - $after,'ms'=>round($ms),'peak_mb'=>round($peakMb,1)
]));

关键指标监控: 文件压缩比例、P95 处理延迟、错误率、缓存命中率。建议针对不同图像类型(人像、产品图、界面截图)分别调整质量参数,避免使用统一配置。

高级裁剪功能

  • 自定义焦点: 将焦点坐标(focus_x, focus_y)存储在 [0..1] 范围内,传递给 resizeCover() 函数以确保关键内容保持在可视区域。
  • 智能裁剪算法: 对于内容管理系统的高级需求,可考虑使用 Intervention Image 等第三方库,在 GD/Imagick 基础上实现基于内容重要性的启发式裁剪。

推荐配置参数

  • JPEG 格式: 质量设置 80-85,启用渐进式加载
  • PNG 格式: 压缩等级 6,适用于需要透明度或矢量图形的场景
  • WebP 格式: 质量设置 75-85(推荐默认值 80),Imagick 使用 webp:method=6
  • AVIF 格式: 质量设置约 40-50(编码时间较长,但压缩效果佳)
  • 上传限制: 最大尺寸 4000×4000 像素,后续生成小尺寸衍生图像
  • 常用尺寸: 方形规格 128/256/512,横向规格 800/1200/1600

故障排除指南

  • 图像方向错误 → EXIF 信息未正确处理。解决方法:使用 GD 的 rotate/flip 函数或 Imagick 的 autoOrient() 方法。
  • PNG 透明背景变为黑色 → JPEG 格式不支持透明度。解决方法:保存为 JPEG 前先合成背景颜色。
  • 缩放后图像模糊 → 缩放算法质量不佳。解决方法:使用 imagecopyresampled()(GD)或 thumbnailImage/resizeImage()(Imagick + Lanczos 滤镜)。
  • 内存不足错误 → 图像文件过大导致内存溢出。解决方法:限制输入文件大小、增加 memory_limit、及时销毁图像资源。
  • WebP 格式不支持 → 系统未编译 WebP 支持。解决方法:检查 imagewebp 函数或 Imagick WebP 支持,使用 JPEG/PNG 格式作为备选方案。

不适用场景

  • 大规模高分辨率图像批处理 — 对于 48MP+ 图像的批量转换且有严格性能要求时,建议使用专用的图像处理服务或后台队列。
  • 专业印刷色彩管理 — 涉及 CMYK 色彩空间、软打样等专业印刷需求时,需要完整的 Imagick 环境和专业色彩管理。
  • 高并发实时处理 — 为大量匿名用户提供实时图像变换服务且无 CDN 缓存时,会造成服务器 CPU 负担过重。

核心要点总结

  • 技术选型原则: 标准 Web 图像优先使用 GD 库;需要色彩配置文件、动画处理或高级格式支持时选择 Imagick
  • 处理流程: 先校正 EXIF 方向信息,再根据需求应用 Cover/Contain 适配模式,支持自定义焦点设置
  • 格式优化策略: 优先输出 WebP/AVIF 格式(系统支持时),备选方案为渐进式 JPEG 或 PNG(透明度场景)
  • 元数据处理: 通常删除元数据以减小文件体积;对色彩要求严格的场景保留或转换 ICC 配置文件
  • 性能控制: 设置合理的像素数量上限,监控压缩效果和处理延迟,采用确定性文件命名进行缓存
  • 参数调优: 根据不同图像类型(人像、产品、界面)分别优化质量参数,避免一刀切配置

总结与实施建议

通过本指南,您已经掌握了从混乱的图像处理(方向错误、尺寸失真、文件臃肿)转向规范化流程的方法。遵循"检测 → 校正 → 适配 → 编码 → 缓存"这一标准流程,可以构建出稳定可靠的图像处理系统,提升用户体验。

快速实施清单

  1. 集成 EXIF 方向自动校正功能
  2. 实现 GD 的 resizeCover / resizeContain 方法(以及对应的 Imagick 版本)
  3. 配置输出格式:WebP (quality=80) → JPEG (quality=82)/PNG 备选;启用渐进式加载
  4. 部署带强缓存策略的按需图像处理端点
  5. 添加性能监控:记录文件压缩比和处理时间

进阶优化方向

  • 实现图像焦点存储机制,优化 Cover 裁剪的视觉效果
  • 建立完整的色彩管理流程:使用 Imagick 将产品图片的色彩配置文件转换至 sRGB 标准
  • 针对关键资源尝试 AVIF 格式,通过离线预生成提升加载速度
  • 完善动画 GIF 处理:集成 coalesceImages()optimizeImageLayers() 优化流程
  • 构建图像处理的测试基准套件,建立回归测试和效果对比机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上海百度整站优化服务wordpress获取指定图片大小

1. 作用 匹配文档中的某些元素为其应用样式。根据不同需求把不同的标签选出来。 2. 分类 分类 基础选择器 包含 标签选择器、ID选择器、类选择器、通用选择器等 复合选择器 包含 后代选择器、子代选择器、伪类选择器等 1 标签选择器 介绍 又称为元素选择器&#xff0c;根…

湘潭营销网站建设物理机安装虚拟机做网站好处

说明 vue路由切换时&#xff0c;当前页面左侧和右侧容器分别从两侧滑出&#xff0c;新页面左右分别从两侧滑入 效果展示 路由切换-滑入滑出效果 难点和踩坑 现路由和新路由始终存在一个页面根容器&#xff0c;通过<transition>组件&#xff0c;效果只能对页面根容器有效…

完全免费的网站源码做app网站的软件

咳咳&#xff0c;请各位小伙伴们注意啦&#xff01;我们要聊的主题可是相当高大上——小动物呼吸机&#xff01; 我们得先了解一下什么是小动物呼吸机。这可不是一般的机器哦&#xff0c;它是一种实验设备&#xff0c;主要用于各种各样的科学研究实验中。比如&#xff0c;在基…

注销主体和注销网站互联网广告精准营销

因项目原因&#xff0c;公司需要在钉钉里面开发小程序。之前用uniapp开发过app&#xff0c;H5&#xff0c;小程序。还真没尝试过钉钉小程序&#xff0c;今天就简单的记录下uniapp运行钉钉小程序中的过程。 在项目目录新建package.json文件&#xff0c;在文件中添加如下代码&am…

农业服务网站建设方案互联网制作公司

时态篇开篇导言&#xff1a;英语的时态是一种动词形式&#xff0c;不同的时态表示动作行为的不同时间与发生方式。粤语同样也有时态&#xff0c;这种时态是通过动词与对应的前后缀以及时间词共同表示。 &#xff08;一&#xff09;普通时态说明&#xff1a;普通时态一般指经常发…

网站开发外包 验收国内设计的企业网站

简介&#xff1a; 由汽车之家实时计算平台负责人邸星星在 4 月 17 日上海站 Meetup 分享的&#xff0c;基于 Flink Iceberg 的湖仓一体架构实践。 内容简要&#xff1a; 一、数据仓库架构升级的背景 二、基于 Iceberg 的湖仓一体架构实践 三、总结与收益 四、后续规划 一、数据…

江苏省城乡建设局网站兰州网站设计制作

QT学习笔记&#xff08;一&#xff09;&#xff1a;VS2013 QT 5.8 运行、编译问题解决 jom: E:\C\4.QT\HelloWord\Makefile.Debug [debug\moc_predefs.h] Error 1 ‘cl’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 jom: E:\C\4.QT\HelloWord\Makefile…

淘宝api 做网站关注公众号平台

在介绍开发板之前&#xff0c;让我们先来区分一下核心板和开发板的区别。核心板是一种集成度高、功能完整的计算模块&#xff0c;搭载系统&#xff0c;简化了外围接口&#xff0c;体积尺寸相对较小&#xff0c;主要适用于嵌入式系统。而开发板由核心板底板组成&#xff0c;提供…

17网站一起做网店质量怎么样秦皇岛网站制作电话

二维教组A[12][18]采用列优先的存储方法&#xff0c;若每个元素各占3个存储单元&#xff0c;且第1个元素的地址为150&#xff0c;则元素A[9][7]的地址为 ( ) A&#xff0e;429 B&#xff0e;432 C&#xff0e;435 D&#xff0e;438 [分析] 本题考查数组元素存储地址的计算。…

手机端网站界面如何做唐山做网站

本节课程将学习以下内容&#xff1a;函数的复写(override)使用super调用父类的成员函数函数的复写(override)复写(override)&#xff0c;也被称为覆盖或者重写。在你对父类的成员方法不满意的时候&#xff0c;你可以在子类中复写这个方法&#xff0c;来写出符合自己要求的方法。…

凡科可以做视频网站吗wordpress完美重置

一.服务器端获取Session对象依赖于客户端携带的Cookie中的JSESSIONID数据。如果用户把浏览器的隐私级别调到最高&#xff0c;这时浏览器是不会接受Cookie、这样导致永远在服务器端都拿不到的JSESSIONID信息。这样就导致服务器端的Session使用不了。Java针对Cookie禁用&#xff…

2025氧化镁厂家、活性氧化镁厂家、肥料级氧化镁厂家最新推荐榜:实力生产与优质供应之选

在当今工业发展的大背景下,氧化镁作为重要的工业原料,在冶金、建材、环保、医药等众多领域发挥着不可替代的作用。随着各行业对氧化镁品质要求的不断提升,如何选择可靠的氧化镁生产厂家成为众多采购企业面临的重要课…

建设网站目的微信里的小程序在哪

存储基础 存储设备 DAS&#xff1a;IDE、SATA、SCSI、SAS、USBNAS&#xff1a;NFS、CIFSSAN&#xff1a;SCSI、FC SAN、iSCSI 存储内容包括元数据和数据&#xff0c;名称节点&#xff08;NameNode&#xff09;存放元数据&#xff0c;数据节点&#xff08;DataNode&#xff09…

vue 企业网站模板广告平面设计软件

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 1.Python如何递归删除空文件夹&#xff0c;这个问题很常见。 但大多数人的解决办法都是自己实现递归函数解决这个问题&#xff0c;其实根本不用那么麻烦。 Python中的os.walk提供了一种从内到外的遍历目录树的方法&#xff…

网站建设课程设计论文做网站常用的软件

点击上方蓝字关注我们不迷路&#xff01;字符串与编码一、了解计算机编码1.1 编码定义&#xff1a;将信息从一种形式转换为另外一种形式的过程叫做编码&#xff0c;即信息转换过程举例&#xff1a;信息加密解密、语言翻译1.2 计算机编码定义&#xff1a;将计算机可读信息转换…

精美网站欣赏网站建设都 包括哪些

你提供的代码是 TypeScript 中的一种类型定义&#xff0c;它使用了联合类型&#xff08;union types&#xff09;和交叉类型&#xff08;intersection types&#xff09;。让我们逐步解析这个定义&#xff1a; 基础类型 首先&#xff0c;假设你已经定义了一个基础类型 baseSe…

商务网站建设的一般流程是什么?公关策划公司

在Vue 3和TypeScript中&#xff0c;深入了解组件的Props是非常重要的。Props是组件之间进行数据传递的一种方式&#xff0c;可以将数据从父组件传递给子组件。 首先&#xff0c;在Vue 3中定义Props的方式有所改变。在组件的选项中&#xff0c;我们可以使用props属性来定义Props…

商城网站设计目标产品营销推广

在知乎上看到一个做嵌入式91年小年轻&#xff0c;分享给大家在他看来&#xff0c;嵌入式也是一个很吃香的技术&#xff0c;在周末写这篇文章的时候&#xff0c;也刚收到一个朋友的微信消息&#xff0c;他说自己拿到了70多万的年包offer。大家想追更作者的原文&#xff0c;可以点…

2025学校家具定制厂家/书包柜厂家推荐榜:专业设计与安全品质首选

随着教育现代化进程的加速推进,学校家具定制行业迎来了前所未有的发展机遇。作为教育环境的重要组成部分,学校家具不仅关系到学生的学习体验,更直接影响着他们的身心健康。近年来,国家对教育投入持续加大,各级学校…

2025农机带厂家最新推荐榜:质量可靠与耐用性能兼备之选

2025农机带厂家最新推荐榜:质量可靠与耐用性能兼备之选行业背景在农业现代化的进程中,农机设备发挥着至关重要的作用。而农机带作为农机设备中不可或缺的传动部件,其质量和性能直接影响着农机的工作效率和稳定性。随…