0

我有以下情况。我有大约600张照片。大多数主题的底部都有一个徽标,应该将其剪掉,因为品牌问题,但不是所有的主题。(使用 ftp 和 photoshop 将是一个挑战)我正在考虑的方法我列出了我所有的图像表格文件夹和我向主题添加了一个超链接,该超链接应该在从底部切出 57px 的方法类上触发,因为图像列表仅限于高度和宽度,切割后不应出现在页面上

网址看起来像

cut.php?target= http://example.com/hideit/2012/03/myimage.jpg

我想在执行后重置 get 参数以避免页面刷新问题,同时会再次从该图像中剪切定义的像素。我正在尝试以下

function cutAndsave($jpg){              
    $folder = explode('/', $jpg);
    $path = 'I:\\xampp\\htdocs\\hideit\\'. $folder[4]. '\\'. $folder[5] .'\\'.$folder[6] ;      

    list($width, $height) = getimagesize($jpg);     
    $offset_x = 0;
    $offset_y = 0;      
    $new_height = $height - 57;
    $new_width = $width;        
    $image = imagecreatefromjpeg($jpg);
    $new_image = imagecreatetruecolor($new_width, $new_height);
    imagecopy($new_image, $image, 0, 0, $offset_x, $offset_y, $width, $height);             
    header('Content-Type: image/jpeg');     
    imagejpeg($new_image,$path, 90);
    header("Location: /cat.php/");
    die();      
    }

但在我的情况下,最后一个标题调用不起作用

4

2 回答 2

1

您手头的具体问题是您在输出图像尝试发送 HTTP 标头。HTTP 标头只能在任何内容之前发送;毕竟它们是标题。

更大的问题是这个想法是无稽之谈。

客户端请求一个 URL example.com/image.php?id=42.jpg,. 您可以将此 URL 视为文件名。图像由文件名/U​​RL 标识。不同的网址,不同的图像。这是一个PHP脚本而不是某个硬盘上的物理文件也没关系,这个细节与客户端无关。客户端请求 URL 并接收图像作为回报,这才是最重要的。图像是否只是从数据存储中读取,是否由脚本动态调整大小,是否由幕后的独角兽现场绘制,这些都无关紧要;这是一个实现细节。

URL 请求,响应。这是您在使用 Web 服务器时需要了解的重要概念。

因此,“重置 URL 参数”毫无意义。你不能那样做。您可以将客户端重定向到不同的 URL,但那是不同的文件/URL。如果您希望客户端获取图像,则每当客户端请求 URL 时,您都会使用图像进行响应。如果用户刷新页面,客户端再次请求 URL,就这样吧。

如果您不想一次又一次地进行图像切割,请缓存调整大小的文件。在代码中,检查:

  1. 哦,有人要图片#42。
  2. 我是否已经有图像 #42 的调整大小版本?
    • 如果不是,请创建一个调整大小的版本并将其保存在某处。
  3. 提供调整大小的图像#42。

最重要的是,您可以设置影响客户端缓存行为的 HTTP 标头,因此客户端会将图像保留在其缓存中,并且不会每次都再次请求它。


如果它也像不覆盖原始. 始终保持原件完好无损,剪切版应该是它的副本。您可以按上述方式生成该副本,也可以在上传原件时生成该副本。但是不要根据您是否已经处理了图像来更改 URL 的行为。

于 2013-02-15T09:55:45.883 回答
0

你有一个错误header("Location: /cat.php/");

它应该是

header("Location: /cut.php");

如果你只想回到最后一页。

如果您想另外显示您的图像,您可以这样做

header("Location: /cut.php?show=$path")

然后在你的文件中执行一个脚本来打印一个<img>标签。

于 2013-02-15T08:44:09.887 回答