打印机模拟(彩色篇)

news/2024/11/9 16:43:09/

打印机模拟(彩色篇)

继承上篇

本来不打算做彩色版的了,毕竟按我的想法和做灰色版的套路是一样的。但是突然又很想看看做出来的效果怎样,和灰度版的对比起来会怎样,所以就对上一份代码修修改改又做出了这版。至于赘言,上一篇里就有了。

做法就基本和上篇灰度版的一样了,都不涉及任何算法,只靠for循环堆砌,毕竟还不是很摸得清python的API用法(刚入门),所以效率很低(当然,python本身效率也是问题啦)。但是目的也只是模拟打印机的工作原理外加满足一下自己的好奇心。先说明这个代码运行起来很慢,扩展2*2都要等上十秒左右,有耐心再试。

效果

从上往下从左往右分别就是2*2、3*3、4*4和原图了。可以拿上篇的灰度图对比一下,做到4*4的时候效果还远远没有这次的好。但毕竟这是彩色的,本身RGB就是灰色的三倍大小了,猜一下就知道这次的视觉效果会更佳。但随之而来的必然是更大的空间和时间的消耗。

这里写图片描述

python代码

实现基本和上一篇灰度版的差不多方法,都很丑陋且低效,运行起来能听到本子CPU风扇的轰鸣声。

from PIL import Image
from numpy import *
from pylab import *
import numpy as npfilename = 'test.jpg';
im = Image.open(filename);
width, height = im.size;r, g, b = im.split();
r_arr = np.array(r).reshape(height, width);
g_arr = np.array(g).reshape(height, width);
b_arr = np.array(b).reshape(height, width);dim = 4;#2, 3 or 4
if dim == 2:paint = [[0, 2], [3, 1]];
elif dim == 3:paint = [[0, 7, 2], [8, 4, 5], [3, 6, 1]];
elif dim == 4:paint = [[0, 8, 2, 10], [12,4,14,6], [3,11,1,9],[15,7,13,5]];top_color = 255;
new_r_arr = [None] * (dim * height);
new_g_arr = [None] * (dim * height);
new_b_arr = [None] * (dim * height);
for i in range(dim * height):new_r_arr[i] = [0] * (dim * width);new_g_arr[i] = [0] * (dim * width);new_b_arr[i] = [0] * (dim * width);div = top_color / (dim * dim);
for i in range(0, height):for j in range(0, width):r_tmp = int(r_arr[i][j] / div);g_tmp = int(g_arr[i][j] / div);b_tmp = int(b_arr[i][j] / div);for ii in range(0, dim):for jj in range(0, dim):if paint[ii][jj] < r_tmp:new_r_arr[dim * i + ii][dim * j + jj] = top_color;else :new_r_arr[dim * i + ii][dim * j + jj] = 0;if paint[ii][jj] < g_tmp:new_g_arr[dim * i + ii][dim * j + jj] = top_color;else :new_g_arr[dim * i + ii][dim * j + jj] = 0;if paint[ii][jj] < b_tmp:new_b_arr[dim * i + ii][dim * j + jj] = top_color;else :new_b_arr[dim * i + ii][dim * j + jj] = 0;im_arr = np.dstack((new_r_arr, new_g_arr, new_b_arr));
new_im = Image.fromarray(np.uint8(im_arr));
new_im.show();

注意

倒数第二行的这句里要显式的将im_arr转成uint8,不然会报 TypeError: Cannot handle this data type。这点我一开始根本不知道,被卡了好一会,然后才误打误撞的在stackoverflow上别人回答的其它的问题上发现这样能解决。至于为什么我也没搞清,大概还是python对数据类型比较严格吧。

new_im = Image.fromarray(np.uint8(im_arr));

http://www.ppmy.cn/news/141886.html

相关文章

颜色错位HP CM1312nfi MFP打印机 CM1015 1017 CM1312 CP1518等彩色激光打印机颜色校准步骤方法

当彩色打印的时候&#xff0c;出现打印有重影&#xff0c;颜色错位&#xff0c;不能重合在一起的时候。可以进行颜色校准改善颜色错位的问题 但一般可能是因为硒鼓已经用太久&#xff0c;选择更换吧。再生硒鼓加粉3次以上&#xff0c;基本都很多问题了。 HP CM1312nfi MFP打印…

惠普HP彩色激光打印机颜色校准方法大全

在完成硒鼓加粉、更换新的兼容&#xff08;国产&#xff09;碳粉盒后&#xff0c;机器打印有时会出现偏色、套色不准、颜色失真等&#xff0c;这时需要对机器进行颜色校准&#xff0c;请 1惠普CE210-3校准步骤 这样会校准颜色并清洁黑色的静电传送带 (ETB)。 1.使用 &#xff0…

打印机测试图_国产彩色激光机一样很靠谱 奔图全新彩色激光机到底怎么样?...

【解读】 说起彩色激光打印机&#xff0c;大家心里首先想到的一定是惠X、佳X品牌吧&#xff0c;但是今天我们来了解的这款彩色激光打印机&#xff0c;来自过国产厂商奔图&#xff0c;其刚刚面向商用市场发布了全新的彩色激光打印机CM2200FDW。 都说国产品牌的产品越来越好&…

若用户想从计算机打印输出一张彩色,【单选题】若用户想从计算机打印输出一张彩色图片,目前选用彩色喷墨打印机最经济。 A. 正确 B. 错误...

【单选题】若用户想从计算机打印输出一张彩色图片,目前选用彩色喷墨打印机最经济。 A. 正确 B. 错误 更多相关问题 用方框中的词补全短文。Chinese, teacher, by bike, singing, watching TV Liu Yun is a1___________. Shes 读下面的对话&#xff0c;根据对话内容选择正确的答…

黑白彩色打印机

package tast1; public class Text_1 { public static void main(String[] args) {Computer cnew Computer();BlackPrinter blacknew BlackPrinter();ColorPrinter colornew ColorPrinter();c.print(black,"黑色打印机");c.print(color, "彩色打印机");}…

兄弟hl3150cdn打印测试页6_兄弟3150CDN彩色激光打印机

兄弟 3150CDN 彩色激光打印机 基本参数 产品类型:彩色激光打印机 最大打印幅面: A4 最高分辨率: 600x600dpi 黑白打印速度: 22ppm 彩色打印速度: 22ppm 内存: 64MB 网络打印:支持有线网络打印 双面打印:自动 打印性能 首页打印时间: 16 秒 打印语言: GDI 接口类型: …

打印机调用彩色和黑色JAVA,Java:利用接口实现打印机案例(墨盒有彩色和黑白色,纸张有A4纸和B5纸)...

把纸张和墨盒都定义为接口,让以后的实现类去实现它。 package com.jredu.oop.ch03; /** * 纸张接口 * @author Administrator * */ public interface Paper {/** * 纸张 */ void paper(); } package com.jredu.oop.ch03; public class A4Paper implements Paper{@Override pub…

STL快速上手2-迭代器

目录 迭代器主要介绍输入迭代器输出迭代器前向迭代器双向迭代器随机访问迭代器环状迭代器多路径迭代器值类型迭代器插入迭代器 迭代器主要介绍 STL 迭代器是 STL 集合类(如 vectors、lists 等)的一部分。它提供一种统一的方式来访问集合中的元素。 主要有以下几种 STL 迭代器…