给我写一个旋转图片的代码
时间: 2024-03-22 21:40:31 浏览: 17
好的,以下是一个旋转图片的 Python 代码示例:
```python
from PIL import Image
# 加载图片
img = Image.open('image.jpg')
# 旋转图片
rotated_img = img.rotate(90)
# 保存图片
rotated_img.save('rotated_image.jpg')
```
该代码使用了 Python 的 Pillow 库来操作图片。首先,我们使用 `Image.open()` 方法加载一张图片,然后使用 `rotate()` 方法旋转图片,最后使用 `save()` 方法保存旋转后的图片。在上面的示例中,我们将图片旋转了 90 度,你可以根据需要修改旋转角度。
相关问题
用C++写一个图片旋转的代码
好的,以下是用 C 语言写图片旋转的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define PI 3.1415926535
/* 定义一个表示像素点的结构体 */
typedef struct pixel {
unsigned char r, g, b; // 分别表示红、绿、蓝分量
} Pixel;
/* 定义一个表示图片的结构体 */
typedef struct image {
int width, height; // 图片的宽度和高度
Pixel *data; // 图片的像素数据
} Image;
/* 读取图片 */
Image* read_image(char *filename) {
FILE *f = fopen(filename, "rb");
if (!f) {
printf("Failed to read image file %s\n", filename);
return NULL;
}
// 读取文件头
char c;
while ((c = fgetc(f)) != '\n') {}
while ((c = fgetc(f)) == '#') {
while ((c = fgetc(f)) != '\n') {}
}
// 提取图片宽度和高度信息
fseek(f, -1, SEEK_CUR);
int width, height, maxval;
fscanf(f, "%d %d %d", &width, &height, &maxval);
// 读取像素数据
Image *img = (Image*)malloc(sizeof(Image));
img->width = width;
img->height = height;
img->data = (Pixel*)malloc(width * height * sizeof(Pixel));
Pixel *p = img->data;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
unsigned char r, g, b;
fread(&r, sizeof(unsigned char), 1, f);
fread(&g, sizeof(unsigned char), 1, f);
fread(&b, sizeof(unsigned char), 1, f);
p->r = r;
p->g = g;
p->b = b;
p++;
}
}
fclose(f);
return img;
}
/* 保存图片 */
void save_image(Image *img, char *filename) {
FILE *f = fopen(filename, "wb");
if (!f) {
printf("Failed to write image file %s\n", filename);
return;
}
// 写入文件头
fprintf(f, "P6\n");
fprintf(f, "%d %d\n", img->width, img->height);
fprintf(f, "255\n");
// 写入像素数据
Pixel *p = img->data;
for (int i = 0; i < img->height; i++) {
for (int j = 0; j < img->width; j++) {
fwrite(&p->r, sizeof(unsigned char), 1, f);
fwrite(&p->g, sizeof(unsigned char), 1, f);
fwrite(&p->b, sizeof(unsigned char), 1, f);
p++;
}
}
fclose(f);
}
/* 将角度转换成弧度 */
double deg_to_rad(double deg) {
return deg * PI / 180.0;
}
/* 将弧度转换成角度 */
double rad_to_deg(double rad) {
return rad * 180.0 / PI;
}
/* 对图片进行旋转 */
Image* rotate_image(Image *img, double angle) {
// 计算旋转后的图片宽度和高度
double rad = deg_to_rad(angle);
int w1 = img->width, h1 = img->height;
int w2 = ceil(w1 * fabs(cos(rad)) + h1 * fabs(sin(rad)));
int h2 = ceil(h1 * fabs(cos(rad)) + w1 * fabs(sin(rad)));
// 创建新的图片对象,并初始化为白色
Image *new_img = (Image*)malloc(sizeof(Image));
new_img->width = w2;
new_img->height = h2;
new_img->data = (Pixel*)malloc(w2 * h2 * sizeof(Pixel));
memset(new_img->data, 255, w2 * h2 * sizeof(Pixel));
// 计算旋转后的像素点坐标,并复制像素数据
int cx = w2 / 2, cy = h2 / 2;
Pixel *p1 = img->data;
Pixel *p2 = new_img->data;
for (int y2 = 0; y2 < h2; y2++) {
for (int x2 = 0; x2 < w2; x2++) {
int x1 = (int)(cos(rad) * (x2 - cx) + sin(rad) * (y2 - cy) + cx + 0.5);
int y1 = (int)(-sin(rad) * (x2 - cx) + cos(rad) * (y2 - cy) + cy + 0.5);
if (x1 >= 0 && x1 < w1 && y1 >= 0 && y1 < h1) {
*p2 = *(p1 + y1 * w1 + x1);
}
p2++;
}
}
// 返回旋转后的图片
return new_img;
}
/* 主函数 */
int main(int argc, char *argv[]) {
if (argc < 4) {
printf("Usage: %s <input_file> <output_file> <angle>\n", argv[0]);
return 0;
}
// 读取命令行参数
char *input_file = argv[1];
char *output_file = argv[2];
double angle = atof(argv[3]);
// 读取图片
Image *img = read_image(input_file);
if (!img) return 0;
// 旋转图片
Image *new_img = rotate_image(img, angle);
// 保存旋转后的图片
save_image(new_img, output_file);
// 释放内存
free(img->data);
free(img);
free(new_img->data);
free(new_img);
printf("Image rotated successfully.\n");
return 0;
}
```
对于以上提供的代码,请确保测试环境 - 图片后缀是否正确,及图片本身是否存在等问题涉及的因素是可控的,否则以上代码可能出现错误。
帮我写一个基于matlab的旋转图片90度的代码
以下是基于MATLAB的旋转图片90度的代码示例:
```matlab
% 读取图片文件
image = imread('example.jpg');
% 显示原始图片
subplot(1,2,1);
imshow(image);
title('Original Image');
% 将图片旋转90度
rotated_image = imrotate(image, 90);
% 显示旋转后的图片
subplot(1,2,2);
imshow(rotated_image);
title('Rotated Image');
% 保存旋转后的图片
imwrite(rotated_image, 'rotated_example.jpg');
```
代码中使用了`imread`函数来读取图片文件,`imshow`函数来显示图片,`imrotate`函数来旋转图片,`imwrite`函数来保存旋转后的图片。其中,`subplot`函数用于将原始图片和旋转后的图片显示在同一个窗口中。